谢谢楼上的热心大侠!
我的目的是:在一个Dialog中有两个框,一个显示projects,另一个框显示某一个projects下面所有的task。
现在,选定projects框里面的某一个project(这里的project用的是radioButton),然后task框里面就会显示该project下面所属的所有tasks。
然后,在task框里选中某个task,在把选中的这个task的信号传给ItemSelected()这个函数,让它来记住我们选的是哪个task。
我具体的代码如下:(有任何问题的地方,请大小直接指出,谢谢)
# -*- coding: utf-8 -*-
"""
Module implementing Dialog.
"""
import PyQt4, sys
from PyQt4 import *
from PyQt4 import QtGui
from PyQt4 import QtCore
from PyQt4.QtGui import QDialog
from PyQt4.QtCore import pyqtSignature
from functools import partial
from Ui_test import Ui_Dialog #这里引入的Ui_Dialog是生成的,里面主要是创建了verticalLayoutWidget和listWidget。
class Dialog(QDialog, Ui_Dialog):
"""
Class documentation goes here.
"""
def __init__(self, parent = None):
"""
Constructor
"""
QDialog.__init__(self, parent)
self.setupUi(self)
self.ProjectList={u'1': [u'Project1', [1, u'Task1'], [2, u'Task2'], [3, u'Task3']],
u'3': [u'Project3', [7, u'Task7'], [8, u'Task8'], [9, u'Task9'], [11, u'Task11'], [12, u'Task12']],
u'2': [u'Project2', [4, u'Task4'], [5, u'Task5'], [6, u'Task6'], [10, u'Task10']]}
def showProject(self):
for i in (self.ProjectList.keys()):
self.radioButton_i = QtGui.QRadioButton(self.verticalLayoutWidget) #根据Projects数目添加RadioButton
self.radioButton_i.setObjectName("radioButton_i")
self.verticalLayout.addWidget(self.radioButton_i)
self.radioButton_i.setText(QtGui.QApplication.translate("Dialog", self.ProjectList[0], None, QtGui.QApplication.UnicodeUTF8)) #显示Projects的名称
self.radioButtoncallback=partial(self.showTasks, self.radioButton_i.text()) #将radioButton的click信号与text捆绑,以便showTasks()知道选择了哪个radioButton
self.connect(self.radioButton_i, QtCore.SIGNAL("clicked()"), self.radioButtoncallback) #链接RadioButton到showTasks()方法
#上面这两行就是前两天问的问题的解决办法,我试了试,成功了,所以就觉得可行。不知道有什么问题,请指教!
def showTasks(self, who):
for i in (self.ProjectList.keys()):
if who in self.ProjectList:
for j in range(len(self.ProjectList)-1):
self.listWidget_2.addItem(self.ProjectList[j+1][1])
self.ItemSelectedcllback=partial(self.ItemSelected, self.listWidget_2.currentItem())
self.connect(self.listWidget_2,QtCore.SIGNAL(itemDoubleClicked(QListWidgetItem *item)),self.ItemSelectedcallback);
def ItemSelected(self, who):
print 'item selected!'
if __name__ == "__main__":
app = PyQt4.QtGui.QApplication(sys.argv)
dlg = Dialog()
dlg.showProject()
dlg.show()
sys.exit(app.exec_())