【问题标题】:How to check/uncheck a QTableView and trigger setData()如何选中/取消选中 QTableView 并触发 setData()
【发布时间】:2017-03-22 18:27:27
【问题描述】:

我有一个自定义的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

【问题讨论】:

  • 澄清一下:您想要 QTableView 之外的两个小部件,它们的激活会更改模型项的“已检查”状态,对吧?可以发帖setData 吗?
  • 我第二个@PierreGM。显示代码。这太笼统了。
  • 已添加代码,抱歉我不是更清楚。最终我想知道是否有一种可行的方法可以自己调用 setData 以便我可以将代码保存在一个地方。

标签: python checkbox pyqt qtableview


【解决方案1】:

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

【讨论】:

  • 您能发布您的解决方案吗?我遇到了同样的问题(全部选中/全部清除)。
猜你喜欢
  • 2015-01-15
  • 2013-10-10
  • 1970-01-01
  • 2023-03-12
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
相关资源
最近更新 更多