2

3つの列を持つQTableViewがあります。2番目の列は数値に関するもので、1、-1、0の3つのタイプしかありません。この3つの「タイプ」の数値(1、-1,0)に異なる色を使用したいのですが、行を異なる色で着色します。どうすればいいですか?

 self.tableView = QTableView(self.tabSentimento)
 self.tableView.setGeometry(QRect(550,10,510,700))
 self.tableView.setObjectName(_fromUtf8("TabelaSentimento"))
 self.tableView.setModel(self.model)
 self.tableView.horizontalHeader().setStretchLastSection(True)

obs:horizontalheader().setStrechLastSection(True)既存のcsvファイルを(ボタンを使用して)テーブルビューで開いたために使用しました。

4

1 に答える 1

4

ビューではなく、モデルで色を定義する必要があります。

def data(self, index, role):
    ...
    if role == Qt.BackgroundRole:
        return QBrush(Qt.yellow)

編集:http://www.saltycrane.com/blog/2007/06/pyqt-42-qabstracttablemodelqtableview/ から完全に盗まれた色の部分を除いて、これは実際の例です

from PyQt4.QtCore import *
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import sys

my_array = [['00','01','02'],
            ['10','11','12'],
            ['20','21','22']]

def main():
    app = QApplication(sys.argv)
    w = MyWindow()
    w.show()
    sys.exit(app.exec_())

class MyWindow(QTableView):
    def __init__(self, *args):
        QTableView.__init__(self, *args)

        tablemodel = MyTableModel(my_array, self)
        self.setModel(tablemodel)

class MyTableModel(QAbstractTableModel):
    def __init__(self, datain, parent=None, *args):
        QAbstractTableModel.__init__(self, parent, *args)
        self.arraydata = datain

    def rowCount(self, parent):
        return len(self.arraydata)

    def columnCount(self, parent):
        return len(self.arraydata[0])

    def data(self, index, role):
        if not index.isValid():
            return QVariant()
        # vvvv this is the magic part
        elif role == Qt.BackgroundRole:
            if index.row() % 2 == 0:
                return QBrush(Qt.yellow)
            else:
                return QBrush(Qt.red)
        # ^^^^ this is the magic part
        elif role != Qt.DisplayRole:
            return QVariant()
        return QVariant(self.arraydata[index.row()][index.column()])

if __name__ == "__main__":
    main()
于 2013-03-25T19:06:51.397 に答える