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

mat*_*t_1 2 python pyqt4 qtablewidget

我对PyQt4的QTableWidget有疑问。假设我有一个QTableWidget,我想在其中使用以下命令将事件连接到单元格单击:

table.cellClicked.connect(cellClick)
Run Code Online (Sandbox Code Playgroud)

然后,cellClick函数完成其工作。关键是:有些单元格包含一个按钮,例如这样(例如,坐标0,0):

button = QtGui.QPushButton()
table.setCellWidget(0,0, button)
Run Code Online (Sandbox Code Playgroud)

现在是我的问题。单元格中的按钮(占用整个单元格空间)的存在会完全禁用cellClicked-单元格不会被单击,因此无法检测到该操作。但是我确实希望我的按钮充满整个单元格。

简而言之,我的问题是-当内部有一个按钮时,如何选择(单击)QTableWidget单元格?

ekh*_*oro 5

简单的答案似乎是:

    button.clicked.connect(cellClick)
Run Code Online (Sandbox Code Playgroud)

但是,您怎么知道被单击的单元格的行/列呢?因此,下一个迭代可能是:

    button = QtGui.QPushButton()
    table.setCellWidget(row, column, button)
    button.clicked.connect(
        lambda *args, row=row, column=column: cellClick(row, column))
Run Code Online (Sandbox Code Playgroud)

如果表是静态的,那没关系。但是如果行和列可以重新排列怎么办?clicked在这种情况下,按钮的处理程序中缓存的行/列可能无效。因此,下一个迭代可能是:

   index = QtCore.QPersistentModelIndex(table.model().index(row, column))
   button.clicked.connect(
        lambda *args, index=index: cellClick(index.row(), index.column()))
Run Code Online (Sandbox Code Playgroud)

(注意:您可以将其他插槽连接到按钮的clicked信号,但是它们被调用的顺序是不确定的)