Как поменять цвет selectorа (при выборе элемента) в QListWidget (pyside6)?

Как поменять цвет селектора (при выборе элемента) с стандартного на свой в QListWidget, я пробовал использовать

self.listWidget.setStyleSheet("selection-background-color: black")

в MainWindow, но он просто не меняется.

Что я делаю не так?

Полный код ниже:

import sys

import httpx
from PySide6 import QtGui, QtWidgets, QtCore
from PySide6.QtGui import QPixmap, QScreen
from PySide6.QtWidgets import QMessageBox

from functions import * # мои личные функции

listdata = getdata() #моя функция
class CustomQWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(CustomQWidget, self).__init__(parent)

        self.titleLabel = QtWidgets.QLabel()
        self.titleLabel.setStyleSheet('''color: White; background-color:  #1C1C1C; font-size:24px; border-radius: 15px;
        min-height: 50px;
        max-height: 50px;
        min-width: 50px;
        max-width: 500px;
        ''')

        self.descriptionLabel = QtWidgets.QLabel()
        self.descriptionLabel.setWordWrap(True)
        self.descriptionLabel.setStyleSheet('color: White; background-color: #1C1C1C; max-height: 150px; border-radius: 15px;')

        self.vBoxLayout = QtWidgets.QVBoxLayout()
        self.vBoxLayout.addWidget(self.titleLabel, 0)
        self.vBoxLayout.addWidget(self.descriptionLabel, 1)
        self.vBoxLayout.setSpacing(0)

        self.iconQLabel = QtWidgets.QLabel()
        self.iconQLabel.setMaximumSize(160, 210)

        self.hBoxLayout = QtWidgets.QHBoxLayout(self)
        self.hBoxLayout.addWidget(self.iconQLabel, 0)
        self.hBoxLayout.addLayout(self.vBoxLayout, 1)

    def setTitle(self, text):
        self.titleLabel.setText(text)

    def setDescription(self, text):
        self.descriptionLabel.setText(text)

    def setIcon(self, imagePath):
        self.iconQLabel.setPixmap(QtGui.QPixmap(imagePath).scaled(
            160, 210))


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        self.listWidget = QtWidgets.QListWidget(self)
        self.listWidget.setStyleSheet("selection-background-color: black")
        self.setCentralWidget(self.listWidget)
        self.pixmap = QPixmap()
        i = 0
        for list in listdata:
            customQWidget = CustomQWidget()
            customQWidget.setTitle(list["tittle"])
            customQWidget.setDescription(list["description"])
            self.pixmap.loadFromData(httpx.get(list["url"].content))

            customQWidget.setIcon(self.pixmap)

            item = QtWidgets.QListWidgetItem(self.listWidget)
            item.setSizeHint(customQWidget.sizeHint())
            self.listWidget.addItem(item)
            item.setData(1, i)
            self.listWidget.setItemWidget(item, customQWidget)
            i = i + 1
        self.listWidget.itemClicked.connect(self.Clicked)


    def Clicked(self, item):
        QMessageBox.information(self, "ListWidget", "You clicked: " + str(item.data(1)))



if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.setStyleSheet("background-color: #212121")
    w.resize(700, 500)
    w.show()
    sys.exit(app.exec_())

Ответы (1 шт):

Автор решения: S. Nick

Пожалуйста, всегда публикуйте минимально-ВОСПРОИЗВОДИМЫЙ пример.

Попробуйте так:

...
#listWidget::item:selected {                             /* <---- */ 
    background-color: black;                             /* <---- */  
} 
...

import sys

import httpx
'''
from PySide6 import QtGui, QtWidgets, QtCore
from PySide6.QtGui import QPixmap, QScreen
from PySide6.QtWidgets import QMessageBox
'''
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *

# ??? from functions import *                             # мои личные функции
# ??? listdata = getdata()                                # моя функция

class CustomQWidget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(CustomQWidget, self).__init__(parent)

        self.titleLabel = QtWidgets.QLabel()
        self.titleLabel.setStyleSheet('''
            color: white; 
            background-color: #1C1C1C; 
            font-size: 24px; 
            border-radius: 15px;
            min-height: 50px;
            max-height: 50px;
            min-width: 50px;
            max-width: 500px;
        ''')

        self.descriptionLabel = QtWidgets.QLabel()
        self.descriptionLabel.setWordWrap(True)
        self.descriptionLabel.setStyleSheet('''
            color: White; 
            background-color: #1C1C1C; 
            max-height: 150px; 
            border-radius: 15px;
        ''')

        self.vBoxLayout = QtWidgets.QVBoxLayout()
        self.vBoxLayout.addWidget(self.titleLabel, 0)
        self.vBoxLayout.addWidget(self.descriptionLabel, 1)
        self.vBoxLayout.setSpacing(0)

        self.iconQLabel = QtWidgets.QLabel()
        self.iconQLabel.setMaximumSize(160, 210)

        self.hBoxLayout = QtWidgets.QHBoxLayout(self)
        self.hBoxLayout.addWidget(self.iconQLabel, 0)
        self.hBoxLayout.addLayout(self.vBoxLayout, 1)

    def setTitle(self, text):
        self.titleLabel.setText(text)

    def setDescription(self, text):
        self.descriptionLabel.setText(text)

    def setIcon(self, imagePath):
        self.iconQLabel.setPixmap(QtGui.QPixmap(imagePath).scaled(
            160, 210))


class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        
        listdata = [
        {
            "tittle": "tittle 1", 
            "description": "description 1",
            "url": "Ok.png",
        },
        {
            "tittle": "tittle 2", 
            "description": "description 2",
            "url": "_+_.png",
        },
        {
            "tittle": "tittle 1", 
            "description": "description 1",
            "url": "lena.jpg",
        },        
        ]
        
        self.listWidget = QtWidgets.QListWidget(self)
        self.listWidget.setObjectName('listWidget')            # +++

# ---        
#        self.listWidget.setStyleSheet("selection-background-color: black")
        
        self.setCentralWidget(self.listWidget)
        self.pixmap = QPixmap()
        i = 0
        for _list in listdata:
            customQWidget = CustomQWidget()
            customQWidget.setTitle(_list["tittle"])
            customQWidget.setDescription(_list["description"])
            
#            self.pixmap.loadFromData(httpx.get(_list["url"].content))
            customQWidget.setIcon(_list["url"])

            item = QtWidgets.QListWidgetItem(self.listWidget)
            item.setSizeHint(customQWidget.sizeHint())
            self.listWidget.addItem(item)
            item.setData(1, i)
            self.listWidget.setItemWidget(item, customQWidget)
            i = i + 1
        self.listWidget.itemClicked.connect(self.clicked_item)


    def clicked_item(self, item):
#        QMessageBox.information(self, "ListWidget", "You clicked: " + str(item.data(1)))
        QMessageBox.information(
            None, 
            "ListWidget", 
            f"You clicked: {item.data(1)}")


StyleSheet = '''
#listWidget {
    background-color: black;
}

#listWidget::item {
    background-color: black;    
}  
#listWidget::item:selected {                             /* <---- */ 
    background-color: black;                             /* <---- */  
}  
'''
            

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    
    app.setStyleSheet(StyleSheet)                        # +++
        
    w = MainWindow()
#    w.setStyleSheet("background-color: #212121")
    w.resize(700, 500)
    w.show()
    sys.exit(app.exec_())

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

→ Ссылка