我是Python和Qt新手...
我正在开发一个 GUI 程序,该程序在开始时使用 QTableWidget
显示数据列表。
使用 setItem()
方法将行插入到表中。它们是QTableWidgetItem
对象。
现在我想允许用户单击选择某一行(QTableWidgetItem
),我的程序将填充辅助QTableWidget
。
我了解到有一种东西叫做信号和插槽。我要用吗?也有使用installEventFilter()
的例子,但它不适合QTableWidgetItem
。
方法是使用 QTableWidget 的 itemClicked
-信号:
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
信号为您提供当前和以前的选择(例如,如果用户取消选择某个项目,您可以清除或隐藏辅助小部件,在这种情况下,当前项目将为 None)。
Qt没有"事件侦听器"。正如您提到的,您可以通过将信号连接到插槽来执行此类操作。
例如:
QObject.connect(myTableWidget, QtCore.SIGNAL("clicked()"), self.foobar)
这将导致当您单击myTableWidget
时调用该方法self.foobar()
。foobar 函数可以检索选择了哪个项目,并基于此填充第二个小部件。
请注意,在 connect
的最后一个参数中,您不使用括号 (foobar()
),只使用方法名!