PyQt:事件未触发,我的代码哪里出错了?

4 投票
1 回答
3369 浏览
提问于 2025-04-15 12:52

我刚开始学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()

我最初的目标是让MyTree.onClick()在我点击树形项目时打印一些东西(并且在这个处理器中能访问到被点击的项目)。

1 个回答

10

你应该这样说

self.connect(self, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), self.onClick)

注意在调用 SIGNAL 的第一个参数中写的是 int,而不是 column。另外,你只需要对树形控件调用一次 connect,而不是对树中的每一个节点都调用一次。

撰写回答