• 14914阅读
  • 4回复

PyQt下List Widget中如何设置item的click()信号????恳请高手赐教!!! [复制链接]

上一主题 下一主题
离线leiyu0815
 
只看楼主 倒序阅读 楼主  发表于: 2010-11-24
创建了一个ListWidget,在里面添加了一些Items,

想要实现:用鼠标点击某一个Item,能有一个信号传出,并且告诉选的是哪个Item。。。恳请高手赐教!!!

代码现在写在这一步:
self.listWidget.addItem(self.ProjectList)

我自己尝试过itemDoubleClicked()等方法,但是都错了,我也不知道具体该怎么用。。。谢谢了!!!
离线dbzhang800

只看该作者 1楼 发表于: 2010-11-24
贴你出错的代码
离线leiyu0815
只看该作者 2楼 发表于: 2010-11-24
回 1楼(dbzhang800) 的帖子
我其实不知道该怎么用,怎么实现。。。

错误都是一些凭自己想像的写法:
self.listWidget.addItem(self.ProjectList )

self.ItemSelectedcllback=partial(self.ItemSelected, self.listWidget.currentItem())#这句想实现,告诉函数ItemSelected()我选了哪个Item。

self.connect(self.listWidget, QtCore.SIGNAL(itemDoubleClicked(QListWidgetItem *item)),self.ItemSelectedcallback);

这样不行,请指教。谢谢!!
离线dbzhang800

只看该作者 3楼 发表于: 2010-11-24
1. 你能详细描述一下你这儿是想做什么么?

2. 你这儿的 partial 是要解决你前几天的问题么?是的话,赶紧改掉
3. 你这种写法都不报错么? QtCore.SIGNAL(itemDoubleClicked(QListWidgetItem *item))
    建议使用信号槽的新式用法(如果你有大量老式代码,且要与老代码保持一致,除外)
离线leiyu0815
只看该作者 4楼 发表于: 2010-11-24
回 3楼(dbzhang800) 的帖子
谢谢楼上的热心大侠!

我的目的是:在一个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_())
快速回复
限100 字节
 
上一个 下一个