如何选择包含按钮的 QTableWidget 单元格
Posted
技术标签:
【中文标题】如何选择包含按钮的 QTableWidget 单元格【英文标题】:How to select a QTableWidget cell containing a button 【发布时间】:2022-01-10 10:09:28 【问题描述】:我有一个关于 PyQt4 的 QTableWidget 的问题。假设我有一个 QTableWidget,我想让一个事件连接到一个单元格点击使用:
table.cellClicked.connect(cellClick)
然后,cellClick 函数完成了它的工作。问题是:一些单元格包含一个按钮,就像这样(坐标 0,0 为例):
button = QtGui.QPushButton()
table.setCellWidget(0,0, button)
现在我的问题来了。单元格中按钮的存在(占用整个单元格空间)完全禁用 cellClicked - 单元格没有被点击,无法检测到操作。但我确实希望我的按钮填充单元格。
所以,简而言之,我的问题是 - 当 QTableWidget 单元格中有一个按钮时,如何选择(单击)它?
【问题讨论】:
【参考方案1】:简单的答案似乎是:
button.clicked.connect(cellClick)
但是你怎么知道被点击的单元格的行/列呢?所以下一次迭代可能是:
button = QPushButton()
table.setCellWidget(row, column, button)
button.clicked.connect(
lambda *args, row=row, column=column: cellClick(row, column))
如果表是静态的,那也没关系。但是如果行和列可以重新排列呢?在这种情况下,缓存在按钮的clicked
处理程序中的行/列可能会失效。所以下一次迭代可能是:
index = QtCore.QPersistentModelIndex(table.model().index(row, column))
button.clicked.connect(
lambda *args, index=index: cellClick(index.row(), index.column()))
(注意:您可以将其他插槽连接到按钮的clicked
信号,但它们将被调用的顺序未定义)
【讨论】:
很好的答案,涵盖了主题的所有范围。感谢您的时间和精力。以上是关于如何选择包含按钮的 QTableWidget 单元格的主要内容,如果未能解决你的问题,请参考以下文章
如何使 QTableWidget 内的单元格小部件的背景不可选?