PyQt - проблема с переопределением метода данных 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. Я схожу с ума, чтобы найти решение. Не могли бы вы помочь мне?


person paky79    schedule 13.09.2016    source источник


Ответы (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)
person ekhumoro    schedule 13.09.2016