【问题标题】:PyQt: event is not triggered, what's wrong with my code?PyQt:事件未触发,我的代码有什么问题?
【发布时间】:2010-11-10 06:51:09
【问题描述】:

我是一名 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() 在我单击树项时打印一些内容(并且可以访问此处理程序中单击的项)。

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    你应该说

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

    注意它在SIGNAL 的第一个参数中显示的是 int 而不是 column。您还只需为树小部件调用一次connect,而不是为树中的每个节点调用一次。

    【讨论】:

    • 谢谢,成功了!出于某种原因,我的浏览器不允许我将您的答案标记为已接受,但它可以工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多