2

私は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)

このモデルの再実装を使用すると、行の色が変わりますが、セルの値は消え、return ステートメントQtSql.QSqlTableModel().data(testindex)は常にNone. 私は解決策を見つけることに夢中になっています。私たちを手伝ってくれますか?

4

1 に答える 1

2

あなたの実装はいくつかの点で壊れています: (1) 未指定のロールに対して常に返される、(2)基本クラス メソッドを呼び出す代わりに、表示ロールが要求されるたびにNoneの新しいインスタンスを作成する。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)
于 2016-09-13T19:20:29.603 に答える