Python PyQt-重新实现QSqlTableModel的数据方法时遇到的问题

Python PyQt-重新实现QSqlTableModel的数据方法时遇到的问题,python,background,pyqt,qtableview,qsqltablemodel,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.

我是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)对于任何未指定的角色,它总是返回
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)