我是一个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为树窗口小部件执行一次调用,而不是对树中的每个节点执行一次调用.