我有一个QtGui.QTableWidget
有四列,最后一列应该显示一个复选框。该表创建如下:
self.table = QtGui.QTableWidget(0, 4, self)
self.table.setHorizontalHeaderLabels(["ID", "Name", "Description", "Status"])
self.table.setAlternatingRowColors(True)
self.table.cellChanged.connect(self._cellChanged)
每个表行的最后一列是这样创建的:
cb = QtGui.QTableWidgetItem("deactive")
cb.setCheckState(QtCore.Qt.CheckState.Unchecked)
self.table.setItem(idx, 3, cb)
现在,当用户单击表格行中的复选框时,我想相应地更改复选框的文本。所以我迷上了cellChanged
信号,如上所示。为此我甚至做了以下事情:
def _cellChanged(self, row, column):
if column == 3:
print self.table.itemAt(row, column).checkState()
text = "active" if self.table.itemAt(row, column).checkState() == QtCore.Qt.CheckState.Checked else "deactive"
self.table.itemAt(row, column).setText(text)
然而,这不起作用。无论用户是选中还是取消选中该复选框,checkState()
方法始终返回Unchecked
。
我在这里缺少什么想法或错误理解?
答案 0 :(得分:1)
只是为了记录,我找到了解决方案。我需要使用self.table.item()
代替self.table.itemAt()
。