Python 3.x 设置modelitem的属性

Python 3.x 设置modelitem的属性,python-3.x,model-view-controller,qt5,stylesheet,pyqt5,Python 3.x,Model View Controller,Qt5,Stylesheet,Pyqt5,我有一个模型/视图,其中有三个元素,我想用不同的颜色。我可以通过以下方式实现这一目标: from PyQt5.QtCore import QAbstractTableModel, QVariant, QModelIndex, Qt from PyQt5.QtWidgets import QTableView, QApplication from PyQt5.QtGui import QColor import sys class Model(QAbstractTableModel):

我有一个模型/视图,其中有三个元素,我想用不同的颜色。我可以通过以下方式实现这一目标:

from PyQt5.QtCore import QAbstractTableModel, QVariant, QModelIndex, Qt
from PyQt5.QtWidgets import QTableView, QApplication
from PyQt5.QtGui import QColor
import sys

class Model(QAbstractTableModel):
    def columnCount(self, parent=QModelIndex()):
        return 2

    def rowCount(self, parent=QModelIndex()):
        return 4

    def data(self, index, role=Qt.DisplayRole):
        if role == Qt.DisplayRole:
            return f'{index.row()} - {index.column()}'
        elif role == Qt.BackgroundRole:
            if index.column() % 2:
                return QColor(Qt.green)
            else:
                return QColor(Qt.blue)
        elif role == Qt.ForegroundRole:
            if index.row() % 2:
                return QColor(Qt.black)
            else:
                return QColor(Qt.red)
        else:
            return QVariant()

app = QApplication(sys.argv)
model = Model()
view = QTableView()
view.setModel(model)
view.show()

sys.exit(app.exec_())
产生期望的结果:

但是,在这种情况下,模型需要知道颜色信息,并且在不接触代码的情况下,不可能随后更改颜色信息。有没有一种方法可以定义类似于
listViewItemProperty
的东西,我可以将其与
样式表一起使用

对于
QListWidget
我可以设置属性,我可以设置属性,之后我可以在样式表中使用它们,如:

QListWidgetItem[valid="true"] {
   background-color: #FF0000;
}

理想情况下,我希望在模型中返回几个布尔标志。然后在样式表中定义如何绘制它。如果可能的话,我想避免
委托

大概,一个
QTableWidget
可以像
QListWidget
一样设置样式。@ekhumaro。我知道这一点,但如何使用自定义属性设置
QTableViewItem
的样式,以及如何设置一个属性?好吧,我假设的方式与您在问题中显示的方式完全相同。但是,考虑到属性不是
QObject
的子类,属性可以与
QListWidgetItem
一起使用,这让我有些惊讶。“我还没来得及亲自测试这一点。”埃克胡洛。我一定错过了什么明显的东西。如何使用
Model/View
?一个
QListWidget
和一个
QTableWidget
都是模型/视图。您没有完全清楚地说明这必须与自定义模型一起使用。如果是这样的话,就没有办法使用样式表来设置单个项目的样式。当然有
QTableView::item
选择器,但它主要将样式应用于所有项。但是我真的不明白为什么你不能在自定义模型中添加一些设置颜色的方法。没有什么强迫你硬编码的。大概,
QTableWidget
的样式与
QListWidget
的样式相同。@ekhumaro。我知道这一点,但如何使用自定义属性设置
QTableViewItem
的样式,以及如何设置一个属性?好吧,我假设的方式与您在问题中显示的方式完全相同。但是,考虑到属性不是
QObject
的子类,属性可以与
QListWidgetItem
一起使用,这让我有些惊讶。“我还没来得及亲自测试这一点。”埃克胡洛。我一定错过了什么明显的东西。如何使用
Model/View
?一个
QListWidget
和一个
QTableWidget
都是模型/视图。您没有完全清楚地说明这必须与自定义模型一起使用。如果是这样的话,就没有办法使用样式表来设置单个项目的样式。当然有
QTableView::item
选择器,但它主要将样式应用于所有项。但是我真的不明白为什么你不能在自定义模型中添加一些设置颜色的方法。没有什么强迫你硬编码的。