如何选择包含按钮的 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 内的单元格小部件的背景不可选?

如何从索引列表中选择 QtableWidget 中的单元格

如何告诉 QTableWidget 结束编辑单元格?

在Qtablewidget单元格中单击了Catch按钮

表格未聚焦时如何设置QTableWidget单元格背景颜色?

单击表格 qtableWidget 的空白区域