Как поменять цвет 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_())
