PyQt - 重新实现 QSqlTableModel 的数据方法的麻烦

Posted

技术标签:

【中文标题】PyQt - 重新实现 QSqlTableModel 的数据方法的麻烦【英文标题】:PyQt - trouble with reimplementing data method of QSqlTableModel 【发布时间】:2017-01-21 11:17:45 【问题描述】:

我是 python 的新手,主要是 pyqt。问题很简单:我有一个QTableView,我想“简单地”改变一些行的颜色。环顾四周,我发现最简单的解决方案应该是以这样的方式覆盖模型中的数据方法:

class MyModel(QtSql.QSqlTableModel):

    def data(self,idx,role):
        testindex=self.index(idx.row(),idx.column(),idx.parent())
        if(role==QtCore.Qt.BackgroundRole):
            return QtGui.QColor(255,0,0)
        elif role == QtCore.Qt.DisplayRole:
            return QtSql.QSqlTableModel().data(testindex)

当我使用此模型重新实现时,行正在改变颜色但单元格值消失并且返回语句QtSql.QSqlTableModel().data(testindex) 始终为None。 我要疯了才能找到解决方案。你能帮帮我吗?

【问题讨论】:

【参考方案1】:

你的实现在几个方面被破坏了:(1) 它总是为任何未指定的角色返回None,(2) 它在每次请求显示角色时创建一个QSqlTableModel 的新实例,而不是调用基类方法。

实现应该是这样的:

class MyModel(QtSql.QSqlTableModel):

    def data(self, index, role):
        if role == QtCore.Qt.BackgroundRole:
            return QtGui.QColor(255, 0, 0)
        return super(MyModel, self).data(index, role)

【讨论】:

以上是关于PyQt - 重新实现 QSqlTableModel 的数据方法的麻烦的主要内容,如果未能解决你的问题,请参考以下文章

在 PyQt 中将图像添加到 QTableWidget

pyqt 删除当前 重新 画

PyQt—QTableWidget实现翻页功能

PyQt:重新创建小部件

PyQt5 无边框窗口重新定义鼠标事件

PyQt5:在 Qmovie 中重新加载 gif