如何处理PySide表中的复选框?

时间:2013-08-11 17:21:51

标签: python pyside

我有一个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

我在这里缺少什么想法或错误理解?

1 个答案:

答案 0 :(得分:1)

只是为了记录,我找到了解决方案。我需要使用self.table.item()代替self.table.itemAt()