如何在 PyQt4 中将事件监听器添加到动态 QTableWidgetItem?

Posted

技术标签:

【中文标题】如何在 PyQt4 中将事件监听器添加到动态 QTableWidgetItem?【英文标题】:How to add event listener to dynamic QTableWidgetItem in PyQt4? 【发布时间】:2012-06-18 10:30:53 【问题描述】:

我是 Python 和 Qt 新手...

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

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

现在我想让用户点击选择某一行(QTableWidgetItem),我的程序将填充第二个QTableWidget

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

【问题讨论】:

【参考方案1】:

最简单的方法就是使用 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 信号,它为您提供当前和先前的选择(例如,如果用户取消选择一个项目,您可以清除或隐藏您的辅助小部件,在这种情况下,当前项目将为无)。

【讨论】:

【参考方案2】:

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

例如:

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

这将导致方法self.foobar() 在您单击myTableWidget 时被调用。 foob​​ar 函数可以检索 which item is selected 并基于此填充第二个小部件。

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

【讨论】:

为什么要使用这种古老的连接机制? @BlaXpirit:想详细说明一下吗?古代在什么意义上?? @Kuba:我想他认为 l4mpi 的答案中使用的语法在某种程度上更好/更新。不知道自己,我一直在 PyQt4 中使用它,它对我来说非常有效。

以上是关于如何在 PyQt4 中将事件监听器添加到动态 QTableWidgetItem?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PyQt4 中将图片添加到 QWidget

如何在 Unity C# 中将 OnPointerDown 侦听器添加到滑块句柄? [复制]

如何在 Qt 中将事件过滤器安装到 WindOWS 窗口?

如何将事件侦听器添加到动态创建的复选框并检查是不是选中了复选框。 JavaScript

如何在 PyQt4 中将 QImage 插入到 NxN 网格布局中?

qt中如何获得动态生成的按钮被点击的事件