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

时间:2016-09-13 18:50:52

标签: python background pyqt qtableview qsqltablemodel

我是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 个答案:

答案 0 :(得分:2)

您的实现在几个方面被破坏:(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)