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
选择器,但它主要将样式应用于所有项。但是我真的不明白为什么你不能在自定义模型中添加一些设置颜色的方法。没有什么强迫你硬编码的。