QTableWidget选择一个带有按钮的单元格

时间:2016-02-18 22:23:28

标签: python pyqt4 qtablewidget

我在PyQt4上有关于QTableWidget的问题。假设我有一个QTableWidget,我希望将一个事件连接到一个单元格点击使用:

table.cellClicked.connect(cellClick)

然后, cellClick 功能完成其工作。问题是:一些单元格包含一个按钮,就像这样(坐标0,0作为例子):

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

现在出现了我的问题。单元格中的按钮(占据整个单元格空间)的存在完全禁用 cellClicked - 单元格未被单击,无法检测到该操作。但我确实希望我的按钮能够填充单元格。

所以,简而言之,我的问题是 - 当里面有一个按钮时,如何选择(点击)一个QTableWidget单元?

1 个答案:

答案 0 :(得分:4)

简单的答案似乎是:

    button.clicked.connect(cellClick)

但是,您如何知道单击的单元格的行/列?所以下一次迭代可能是:

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