1

我是 Python 和 Qt 新手...

我正在开发一个 GUI 程序,它显示一QTableWidget开始使用的数据列表。

使用该setItem()方法将行插入到表中。它们是QTableWidgetItem对象。

现在我想允许用户单击选择某一行(QTableWidgetItem),我的程序将填充一个辅助QTableWidget.

我了解到有一种东西叫做 Signal and Slot。我会用那个吗?也有使用的例子installEventFilter(),但不适合QTableWidgetItem.

4

2 回答 2

8

最简单的方法就是使用itemClickedQTableWidget 的 -signal:

def handle_item_clicked(tableItem):
    #the callback, called when an item is clicked, with the item as an argument
    #populate the secondary table in some way

#register the callback with the QTableWidget
yourTableWidget.itemClicked.connect(handle_item_clicked)

您还可以使用currentItemChanged为您提供当前和先前选择的信号(例如,如果用户取消选择一个项目,您可以清除或隐藏您的辅助小部件,在这种情况下,当前项目将为无)。

于 2012-06-18T12:31:34.187 回答
1

Qt 没有“事件监听器”。正如您所提到的,您可以通过信号连接到插槽来执行此类操作。

例如:

QObject.connect(myTableWidget, QtCore.SIGNAL("clicked()"), self.foobar)

这将导致self.foobar()在您单击 时调用该方法myTableWidget。foob​​ar 函数可以检索选择了哪个项目并基于此填充第二个小部件。

请注意,在 的最后一个参数中connect,您不使用括号 ( foobar()),只使用方法名称!

于 2012-06-18T11:32:13.697 回答