我有一个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
.
有什么想法我在这里遗漏或误解的吗?