Я настраиваю QListView
и ListItem
, ListItem
содержит цветную метку, но красочная метка не работает? Я не могу понять, почему QLabel
не показывает свой цвет.
Демонстрационный код
from qtpy.QtWidgets import *
from qtpy.QtCore import *
from qtpy.QtGui import *
class ListItem(QWidget):
def __init__(self, color, info):
super().__init__()
lay = QHBoxLayout()
self._colorLabel = QLabel()
self._info = QLabel(info)
lay.addWidget(self._colorLabel)
lay.addWidget(self._info)
self.setLayout(lay)
self._colorLabel.setAutoFillBackground(True)
self.setLabelColor(color)
def setLabelColor(self, color):
pal = self._colorLabel.palette()
pal.setColor(QPalette.Window, color)
self._colorLabel.setPalette(pal)
class ListWiget(QListWidget):
def _addItem(self, item):
tmpItem = QListWidgetItem()
tmpItem.setSizeHint(item.sizeHint())
self.addItem(tmpItem)
self.setItemWidget(tmpItem, item)
app = QApplication([])
listW = ListWiget()
item = ListItem(Qt.red, "red")
item2 = ListItem(Qt.blue, "blue")
listW._addItem((item2))
listW._addItem(item)
listW.show()
app.exec()
Вы должны использовать Base
вместо Window
:
def setLabelColor(self, color):
pal = self._colorLabel.palette()
pal.setColor(QPalette.Base, color)
self._colorLabel.setPalette(pal)
Или, в качестве альтернативы, явно установите фоновую роль, чтобы избежать использования родительского переопределения из представления: self._colorLabel.setBackgroundRole(QPalette.Window)
Теперь для решения этой проблемы есть 3 метода. Большое вам спасибо.
Если добавление таблицы стилей
self._colorLabel.setStyleSheet("QLabel {background:yellow;}")
будет работать, я также хочу, чтобы метод публикации работал.