如何对 PyQt4 QTreeWidget 中的点击做出反应

Posted

技术标签:

【中文标题】如何对 PyQt4 QTreeWidget 中的点击做出反应【英文标题】:How to react on a click in PyQt4 QTreeWidget 【发布时间】:2013-07-03 12:13:00 【问题描述】:

我是 Pyhthon 和 Qt 的新手,因此提出了这个基本问题。我想要的是,当我单击 QTreeWidget 中的一个项目时,会调用一个事件处理程序,它告诉我单击了哪个项目。我试过的代码是:

    self.dir_tree = QTreeWidget ()
    self.dir_tree.setColumnCount (3)
    self.dir_tree.setHeaderLabels (("File", "Type", "Size"))
    self.dir_tree.connect (dir_tree, SIGNAL ("itemClicked (QTreeWidgetItem*, int)"), self.onClickItem)

def onClickItem (self, column):
    print (column) 

这个不运行,错误码是:

TypeError: arguments did not match any overloaded call:
  QObject.connect(QObject, SIGNAL(), QObject, SLOT(),Qt.ConnectionType=Qt.AutoConnection): argument 1 has unexpected type 'function'
  QObject.connect(QObject, SIGNAL(), callable, Qt.ConnectionType=Qt.AutoConnection): argument 1 has unexpected type 'function'
  QObject.connect(QObject, SIGNAL(), SLOT(), Qt.ConnectionType=Qt.AutoConnection): argument 1 has unexpected type 'function'

我做错了什么?还有一个与此相关的问题:如何确定点击了哪个项目?

我找不到这方面的教程,欢迎任何建议。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

这个问题问得太早了,经过大量的实验我找到了答案。代码没有提到 self.dirtree 并从 self.dir_tree 而不是 self 连接是错误的。所以正确的代码应该是:

    self.connect (self.dir_tree, SIGNAL ("itemClicked(QTreeWidgetItem*, int)"), self.onClickItem)

一些实验导致了以下回调:

def onClickItem (self, item, column):
    print (item, column) 

Item 指的是点击的 QTreeWidgetItem 本身(在我的情况下,它是一个带有额外信息的派生类:仍然可以正常工作)和点击的列的列。

最后一个问题仍然存在。我仍然没有很好地掌握信号/插槽。欢迎任何指向好的教程的指针。

【讨论】:

以上是关于如何对 PyQt4 QTreeWidget 中的点击做出反应的主要内容,如果未能解决你的问题,请参考以下文章

Python QTreeWidget设置根元素

PyQt QTreeWidget.clear() 导致崩溃

如何对 QTreeWidget 列进行排序?

QT 中的QTreeWidget控件如何让里面的item输入只输入数字

PyQt5如何实现对QTreeWidget下所有Item的遍历

如何使用 QTreeWidget 在 <list> 中的 <item>