QListWidget Item другого цвета для выделенных элементов

У меня есть QListWidget в PySide2, и мне нужны разные цвета для выбранных элементов. Это возможно? Я включу 2 фотографии для демонстрации.

Что у меня есть на данный момент: введите здесь описание изображения

И это то, что я хотел бы иметь:

введите здесь описание изображения


person winteralfs    schedule 20.05.2019    source источник
comment
Я использую PySide2, и это QListWidget. Мне нужны два вида цветов выделения: один будет стандартным синим цветом выделения для QListWidget, а другой будет более темным оттенком синего для других выделенных элементов в виджете. Я буду работать над примером для публикации.   -  person winteralfs    schedule 20.05.2019
comment
Я рекомендую, чтобы следующие вопросы сигнализировали о том, что вы используете PySide2, не каждое решение для PySide совместимо с PySide2, и наоборот.   -  person eyllanesc    schedule 20.05.2019


Ответы (1)


Вы должны использовать делегат и переопределить QPalette QStyleOptionViewItem. В следующем примере цвет выделения зависит от того, четная это строка или нет.

from PySide2 import QtCore, QtGui, QtWidgets
import random


class HighlightedDelegate(QtWidgets.QStyledItemDelegate):
    def initStyleOption(self, option, index):
        super(HighlightedDelegate, self).initStyleOption(option, index)
        # highlight color
        color = (
            QtGui.QColor("gray")
            if index.row() % 2 == 0
            else QtGui.QColor("salmon")
        )
        option.palette.setColor(
            QtGui.QPalette.Normal, QtGui.QPalette.Highlight, color
        )


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)

    w = QtWidgets.QListWidget(
        selectionMode=QtWidgets.QAbstractItemView.MultiSelection
    )
    delegate = HighlightedDelegate(w)
    w.setItemDelegate(delegate)
    for i in range(100):
        it = QtWidgets.QListWidgetItem("item-{}".format(i))
        w.addItem(it)
    w.resize(640, 480)
    w.show()
    sys.exit(app.exec_())

введите здесь описание изображения

person eyllanesc    schedule 20.05.2019