PyQt:事件没有被触发,我的代码出了什么问题?

4 python pyqt

我是一个Python新手,我正在尝试用一个事件处理程序编写一个简单的应用程序,当单击自定义QTreeWidget中的项目时,该事件处理程序会被激活.由于某种原因,它不起作用.由于我只是在学习它的开始,我无法弄清楚我做错了什么.这是代码:

#!/usr/bin/env python

import sys

from PyQt4.QtCore import SIGNAL

from PyQt4.QtGui import QApplication
from PyQt4.QtGui import QMainWindow
from PyQt4.QtGui import QTreeWidget
from PyQt4.QtGui import QTreeWidgetItem

class MyTreeItem(QTreeWidgetItem):

    def __init__(self, s, parent = None):

        super(MyTreeItem, self).__init__(parent, [s])

class MyTree(QTreeWidget):

    def __init__(self, parent = None):

        super(MyTree, self).__init__(parent)
        self.setMinimumWidth(200)
        self.setMinimumHeight(200)
        for s in ['foo', 'bar']:
            MyTreeItem(s, self)
        self.connect(self, SIGNAL('itemClicked(QTreeWidgetItem*, column)'), self.onClick)

    def onClick(self, item, column):

        print item

class MainWindow(QMainWindow):

    def __init__(self, parent = None):

        super(MainWindow, self).__init__(parent)
        self.tree = MyTree(self)

def main():

    app = QApplication(sys.argv)
    win = MainWindow()
    win.show()
    app.exec_()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

我最初的目标是在单击一个树项目时使MyTree.onClick()打印一些内容(并且可以访问此处理程序中单击的项目).

Vin*_*jip 10

你应该说

self.connect(self, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), self.onClick)
Run Code Online (Sandbox Code Playgroud)

注意它在第一个参数中表示int而不是SIGNAL.您还只需要connect为树窗口小部件执行一次调用,而不是对树中的每个节点执行一次调用.