Python 如何选中/取消选中QTableView并触发setData()

Python 如何选中/取消选中QTableView并触发setData(),python,checkbox,pyqt,qtableview,Python,Checkbox,Pyqt,Qtableview,我有一个自定义的QTableModel,我正在PyQt中使用QTableView显示它。我有一些字段设置为可检查,我想添加“全部检查”和“无检查”按钮。我觉得应该有一种方法可以从代码中调用setData(),使选中状态与我在setData()中编写的代码一样发生变化。事实上有没有办法做到这一点 以下是我根据要求使用的setData: if role == Qt.CheckStateRole: row = index.row() column = index.col

我有一个自定义的
QTableModel
,我正在PyQt中使用
QTableView
显示它。我有一些字段设置为可检查,我想添加“全部检查”和“无检查”按钮。我觉得应该有一种方法可以从代码中调用
setData()
,使选中状态与我在
setData()中编写的代码一样发生变化。事实上有没有办法做到这一点

以下是我根据要求使用的setData:

if role == Qt.CheckStateRole:
        row = index.row()
        column = index.column()

        if row == 0 and column != 0:
            self._data.parsingConfiguration['columnEnabled'][column-1] = True if value == Qt.Checked else False
            self.dataChanged.emit(self.createIndex(1, column), self.createIndex(len(self._data.data),column))

            if column-1 == self._data.parsingConfiguration['groupNumberColumn']:
                self.setGroupNumber(self.getFirstEnabledMember())
            elif column-1 == self._data.parsingConfiguration['timeStepColumn']:
                self.setTimeStep(self.getFirstEnabledMember())
            self.emit(SIGNAL("layoutChanged()"))
            return True
        if column == 0 and row != 0:
            self._data.parsingConfiguration['rowEnabled'][row-1] = True if value == Qt.Checked else False
            self.dataChanged.emit(self.createIndex(row, 1), self.createIndex(row, self._data.numColumns+1))
            return True
        return False

经过更多的尝试和错误后,我发现我可以更改通知数据函数在QCheckState上返回的数据,然后从模型发出layoutChanged()信号。这仍然没有调用setData方法,并且确实需要编写单独的函数(因此没有完成我的初始目标),但是从用户的角度来看,它确实实现了预期的结果。

只是澄清一下:您希望在QTableView之外有两个小部件,它们的激活会改变模型项的“选中”状态,对吗?你能把你的
setData
贴出来吗?我是第二个@PierreGM。显示代码。这太夸张了。代码添加了,对不起,我不太清楚。最后,我想知道是否有一种可行的方法可以自己调用setData,这样我就可以把代码保存在一个地方。你能发布你的解决方案吗?我遇到了相同的问题(全部选中/全部清除)。