如何选择包含按钮的QTableWidget单元格

3

我在PyQt4中有关于QTableWidget的问题。假设我有一个QTableWidget,我想要将一个事件与单元格点击连接起来,使用:

table.cellClicked.connect(cellClick)

然后,cellClick函数开始发挥作用。问题是:有些单元格包含一个按钮,例如(以0,0坐标为例):

button = QtGui.QPushButton()
table.setCellWidget(0,0, button)

现在出现了问题。一个占据整个单元格空间的按钮会完全禁用单元格的点击,单元格无法被点击,操作也无法被检测。但我确实希望我的按钮填满整个单元格。
简而言之,我的问题是 - 当单元格内有按钮时,如何选择(点击)QTableWidget单元格?
1个回答

12

简单的答案似乎是:

    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 信号,但它们被调用的顺序是未定义的)


非常好的回答,涵盖了该主题的所有范围。感谢您的时间和努力。 - Leogout

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接