1

我是 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'

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

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

谢谢你的帮助。

4

1 回答 1

2

问题问得太早了,经过大量实验我找到了答案。代码没有提到 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 本身(在我的情况下,它是具有额外信息的派生类:仍然可以正常工作)和单击的列的列。

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

于 2013-07-03T13:43:38.390 回答