Как добавить виджет созданный в Qt Designer в QListWidget (PySide6)
Я создал виджет в Qt Designer, но при реализации его в QListWidget возникла проблема.
В теории при нажатии на элемент в списке, должен быть очищен listwidget и в нём должен быть отрисован новый виджет (Ui_Widget).
Скорее всего проблема строится в неправильном построении класса, но я не знаю как его правильно построить и по факту получаю ошибку.
AttributeError: 'Ui_Widget' object has no attribute 'titlelabel_2'
# -*- coding: utf-8 -*-
import sys
import httpx
from PySide6 import QtWidgets, QtGui, QtCore
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt, SIGNAL)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QLineEdit, QMainWindow, QPushButton,
QSizePolicy, QStatusBar, QVBoxLayout, QWidget, QListWidget, QMessageBox, QListView,
QHBoxLayout, QGridLayout, QFrame, QButtonGroup, QLabel)
class Ui_Widget(object):
def setupUi(self, Widget):
if not Widget.objectName():
Widget.setObjectName(u"Widget")
Widget.resize(980, 747)
Widget.setStyleSheet(u"background-color: #121212;")
self.gridLayout = QGridLayout(Widget)
self.gridLayout.setObjectName(u"gridLayout")
self.frame = QFrame(Widget)
self.frame.setObjectName(u"frame")
self.frame.setFrameShape(QFrame.StyledPanel)
self.frame.setFrameShadow(QFrame.Raised)
self.gridLayout_2 = QGridLayout(self.frame)
self.gridLayout_2.setObjectName(u"gridLayout_2")
self.iconlabel_2 = QLabel(self.frame)
self.iconlabel_2.setObjectName(u"iconlabel_2")
self.iconlabel_2.setMinimumSize(QSize(160, 210))
self.iconlabel_2.setMaximumSize(QSize(160, 210))
self.iconlabel_2.setStyleSheet(u"#iconlabel_2 {\n"
" border: 2px solid #141414;\n"
" background-color: #212121;\n"
" border-radius: 20px;\n"
"}")
self.gridLayout_2.addWidget(self.iconlabel_2, 0, 0, 2, 1)
self.descriptionlabel_2 = QLabel(self.frame)
self.descriptionlabel_2.setObjectName(u"descriptionlabel_2")
self.descriptionlabel_2.setStyleSheet(u"color: #bfbfbf;\n"
"")
self.descriptionlabel_2.setTextFormat(Qt.AutoText)
self.descriptionlabel_2.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignTop)
self.descriptionlabel_2.setWordWrap(True)
self.gridLayout_2.addWidget(self.descriptionlabel_2, 1, 1, 1, 1)
self.titlelabel_2 = QLabel(self.frame)
self.titlelabel_2.setObjectName(u"titlelabel_2")
self.titlelabel_2.setMaximumSize(QSize(16777215, 20))
self.titlelabel_2.setStyleSheet(u"color: #bfbfbf;\n"
"")
self.gridLayout_2.addWidget(self.titlelabel_2, 0, 1, 1, 1)
self.serieslistWidget_2 = QListWidget(self.frame)
self.serieslistWidget_2.setObjectName(u"serieslistWidget_2")
self.serieslistWidget_2.setStyleSheet(u"#serieslistWidget_2 {\n"
" border: 2px solid #141414;\n"
" background-color: #212121;\n"
" border-radius: 20px;\n"
"}\n"
"#serieslistWidget_2::item {\n"
" background-color: #212121; \n"
"} \n"
"#serieslistWidget_2::item:selected { /* <---- */ \n"
" background-color: #0f0f0f; /* <---- */ \n"
"} \n"
"#serieslistWidget_2::item:hover { /* <---- */ \n"
" background-color: #0f0f0f; /* <---- */ \n"
"}")
self.serieslistWidget_2.setProperty("isWrapping", False)
self.gridLayout_2.addWidget(self.serieslistWidget_2, 2, 0, 1, 2)
self.gridLayout.addWidget(self.frame, 0, 0, 1, 1)
QMetaObject.connectSlotsByName(Widget)
# setupUi
def setTitle(self, text):
self.titlelabel_2.setText(text)
def setDescription(self, text):
self.descriptionlabel_2.setText(text)
def setIcon(self, imagePath):
self.iconlabel_2.setPixmap(QtGui.QPixmap(imagePath).scaled(
160, 210))
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: #212121; 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: #212121; 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 Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(872, 567)
MainWindow.setAutoFillBackground(False)
MainWindow.setStyleSheet(u"background-color: #121212;")
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.horizontalLayout = QHBoxLayout(self.centralwidget)
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.gridLayout = QGridLayout()
self.gridLayout.setObjectName(u"gridLayout")
self.lineEdit = QLineEdit(self.centralwidget)
self.lineEdit.setObjectName(u"lineEdit")
self.lineEdit.setStyleSheet(u"QLineEdit {\n"
"border: 2px solid #141414;\n"
"border-radius: 10px;\n"
"background-color: #212121;\n"
"color: White\n"
"}")
self.gridLayout.addWidget(self.lineEdit, 0, 4, 1, 1)
self.settingsbutton = QPushButton(self.centralwidget)
self.buttonGroup = QButtonGroup(MainWindow)
self.buttonGroup.setObjectName(u"buttonGroup")
self.buttonGroup.addButton(self.settingsbutton)
self.settingsbutton.setObjectName(u"settingsbutton")
self.settingsbutton.setStyleSheet(u"color: #bfbfbf;")
icon = QIcon()
icon.addFile(u"res/pictures/settings.png", QSize(), QIcon.Normal, QIcon.Off)
self.settingsbutton.setIcon(icon)
self.gridLayout.addWidget(self.settingsbutton, 0, 6, 1, 1)
self.searchbutton = QPushButton(self.centralwidget)
self.buttonGroup.addButton(self.searchbutton)
self.searchbutton.setObjectName(u"searchbutton")
self.searchbutton.setStyleSheet(u"color: #bfbfbf; ")
icon1 = QIcon()
icon1.addFile(u"res/pictures/search.png", QSize(), QIcon.Normal, QIcon.Off)
self.searchbutton.setIcon(icon1)
self.gridLayout.addWidget(self.searchbutton, 0, 5, 1, 1)
self.horizontalLayout_3 = QHBoxLayout()
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
self.gridLayout.addLayout(self.horizontalLayout_3, 0, 0, 1, 1)
self.achievementbutton_2 = QPushButton(self.centralwidget)
self.buttonGroup.addButton(self.achievementbutton_2)
self.achievementbutton_2.setObjectName(u"achievementbutton_2")
self.achievementbutton_2.setStyleSheet(u"color: #bfbfbf;\n"
"border: 2px solid #141414;\n"
"border-radius: 2px;")
icon2 = QIcon()
icon2.addFile(u"res/pictures/favorite.png", QSize(), QIcon.Normal, QIcon.Off)
self.achievementbutton_2.setIcon(icon2)
self.gridLayout.addWidget(self.achievementbutton_2, 0, 1, 1, 1)
self.folderbutton = QPushButton(self.centralwidget)
self.buttonGroup.addButton(self.folderbutton)
self.folderbutton.setObjectName(u"folderbutton")
self.folderbutton.setStyleSheet(u"color: #bfbfbf; ")
icon3 = QIcon()
icon3.addFile(u"res/pictures/folder.png", QSize(), QIcon.Normal, QIcon.Off)
self.folderbutton.setIcon(icon3)
self.gridLayout.addWidget(self.folderbutton, 0, 3, 1, 1)
self.achievementbutton = QPushButton(self.centralwidget)
self.buttonGroup.addButton(self.achievementbutton)
self.achievementbutton.setObjectName(u"achievementbutton")
self.achievementbutton.setStyleSheet(u"color: #bfbfbf; ")
icon4 = QIcon()
icon4.addFile(u"res/pictures/achievement.png", QSize(), QIcon.Normal, QIcon.Off)
self.achievementbutton.setIcon(icon4)
self.gridLayout.addWidget(self.achievementbutton, 0, 2, 1, 1)
self.listWidget = QListWidget(self.centralwidget)
self.listWidget.setObjectName(u"listWidget")
self.listWidget.viewport().setProperty("cursor", QCursor(Qt.ArrowCursor))
self.listWidget.setToolTipDuration(-5)
self.listWidget.setAutoFillBackground(False)
self.listWidget.setStyleSheet(u"#listWidget {\n"
" border: 2px solid #141414;\n"
" background-color: #212121;\n"
" border-radius: 20px;\n"
"}\n"
"#listWidget::item {\n"
" background-color: #212121; \n"
"} \n"
"#listWidget::item:selected { /* <---- */ \n"
" background-color: #0f0f0f; /* <---- */ \n"
"} \n"
"#listWidget::item:hover { /* <---- */ \n"
" background-color: #0f0f0f; /* <---- */ \n"
"}")
self.listWidget.setFrameShape(QFrame.NoFrame)
self.listWidget.setFrameShadow(QFrame.Plain)
self.listWidget.setLineWidth(0)
self.listWidget.setMovement(QListView.Static)
self.listWidget.setResizeMode(QListView.Fixed)
self.listWidget.setSortingEnabled(False)
self.gridLayout.addWidget(self.listWidget, 1, 0, 1, 7)
self.horizontalLayout.addLayout(self.gridLayout)
MainWindow.setCentralWidget(self.centralwidget)
self.pixmap = QPixmap()
i = 0
listdata = [
{
"title": "Название",
"description": "Описание",
"icon": "Ok.png",
},
]
for list in listdata:
customQWidget = CustomQWidget()
customQWidget.setTitle(list["title"])
customQWidget.setDescription(list["description"])
customQWidget.setIcon(list["icon"])
item = QtWidgets.QListWidgetItem(self.listWidget)
item.setSizeHint(customQWidget.sizeHint())
self.listWidget.addItem(item)
item.setData(1, i)
self.listWidget.setItemWidget(item, customQWidget)
i += 1
self.listWidget.itemClicked.connect(self.Clicked)
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.settingsbutton.setText("")
self.searchbutton.setText("")
self.achievementbutton_2.setText(
QCoreApplication.translate("MainWindow", u"\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435", None))
self.folderbutton.setText(
QCoreApplication.translate("MainWindow", u"\u041a\u0430\u0442\u0430\u043b\u043e\u0433", None))
self.achievementbutton.setText(
QCoreApplication.translate("MainWindow", u"\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f", ))
def Clicked(self):
self.listWidget.clear()
customqwidget2 = Ui_Widget()
customqwidget2.setTitle("Тут название")
customqwidget2.setDescription("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum")
customqwidget2.setIcon("ok.png")
item = QtWidgets.QListWidgetItem(self.listWidget)
item.setSizeHint(customqwidget2.sizeHint())
self.listWidget.addItem(item)
self.listWidget.setItemWidget(item, customqwidget2)
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
Создайте другой класс, который наследуется от соответствующего виджета, и используйте созданный класс для его заполнения.
import sys
import httpx
'''
from PySide6 import QtWidgets, QtGui, QtCore
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QMetaObject, QObject, QPoint, QRect,
QSize, QTime, QUrl, Qt, SIGNAL)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QFont, QFontDatabase, QGradient, QIcon,
QImage, QKeySequence, QLinearGradient, QPainter,
QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QLineEdit, QMainWindow, QPushButton,
QSizePolicy, QStatusBar, QVBoxLayout, QWidget, QListWidget, QMessageBox, QListView,
QHBoxLayout, QGridLayout, QFrame, QButtonGroup, QLabel)
'''
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class Ui_Widget(object):
def setupUi(self, Widget):
if not Widget.objectName():
Widget.setObjectName(u"Widget")
Widget.resize(980, 747)
Widget.setStyleSheet(u"background-color: #121212;")
self.gridLayout = QGridLayout(Widget)
self.gridLayout.setObjectName(u"gridLayout")
self.frame = QFrame(Widget)
self.frame.setObjectName(u"frame")
self.frame.setFrameShape(QFrame.StyledPanel)
self.frame.setFrameShadow(QFrame.Raised)
self.gridLayout_2 = QGridLayout(self.frame)
self.gridLayout_2.setObjectName(u"gridLayout_2")
self.iconlabel_2 = QLabel(self.frame)
self.iconlabel_2.setObjectName(u"iconlabel_2")
self.iconlabel_2.setMinimumSize(QSize(160, 210))
self.iconlabel_2.setMaximumSize(QSize(160, 210))
self.iconlabel_2.setStyleSheet(u"#iconlabel_2 {\n"
" border: 2px solid #141414;\n"
" background-color: #212121;\n"
" border-radius: 20px;\n"
"}")
self.gridLayout_2.addWidget(self.iconlabel_2, 0, 0, 2, 1)
self.descriptionlabel_2 = QLabel(self.frame)
self.descriptionlabel_2.setObjectName(u"descriptionlabel_2")
self.descriptionlabel_2.setStyleSheet(u"color: #bfbfbf;\n"
"")
self.descriptionlabel_2.setTextFormat(Qt.AutoText)
self.descriptionlabel_2.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignTop)
self.descriptionlabel_2.setWordWrap(True)
self.gridLayout_2.addWidget(self.descriptionlabel_2, 1, 1, 1, 1)
self.titlelabel_2 = QLabel(self.frame)
self.titlelabel_2.setObjectName(u"titlelabel_2")
self.titlelabel_2.setMaximumSize(QSize(16777215, 20))
self.titlelabel_2.setStyleSheet(u"color: #bfbfbf;\n"
"")
self.gridLayout_2.addWidget(self.titlelabel_2, 0, 1, 1, 1)
self.serieslistWidget_2 = QListWidget(self.frame)
self.serieslistWidget_2.setObjectName(u"serieslistWidget_2")
self.serieslistWidget_2.setStyleSheet(u"#serieslistWidget_2 {\n"
" border: 2px solid #141414;\n"
" background-color: #212121;\n"
" border-radius: 20px;\n"
"}\n"
"#serieslistWidget_2::item {\n"
" background-color: #212121; \n"
"} \n"
"#serieslistWidget_2::item:selected { /* <---- */ \n"
" background-color: #0f0f0f; /* <---- */ \n"
"} \n"
"#serieslistWidget_2::item:hover { /* <---- */ \n"
" background-color: #0f0f0f; /* <---- */ \n"
"}")
self.serieslistWidget_2.setProperty("isWrapping", False)
self.gridLayout_2.addWidget(self.serieslistWidget_2, 2, 0, 1, 2)
self.gridLayout.addWidget(self.frame, 0, 0, 1, 1)
QMetaObject.connectSlotsByName(Widget)
''' НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
# setupUi
def setTitle(self, text):
# AttributeError: 'Ui_Widget' object has no attribute 'titlelabel_2'
self.titlelabel_2.setText(text)
def setDescription(self, text):
self.descriptionlabel_2.setText(text)
def setIcon(self, imagePath):
self.iconlabel_2.setPixmap(QtGui.QPixmap(imagePath).scaled(
160, 210))
'''
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: #212121; 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: #212121; 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 Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(872, 567)
MainWindow.setAutoFillBackground(False)
MainWindow.setStyleSheet(u"background-color: #121212;")
self.centralwidget = QWidget(MainWindow)
self.centralwidget.setObjectName(u"centralwidget")
self.horizontalLayout = QHBoxLayout(self.centralwidget)
self.horizontalLayout.setObjectName(u"horizontalLayout")
self.gridLayout = QGridLayout()
self.gridLayout.setObjectName(u"gridLayout")
self.lineEdit = QLineEdit(self.centralwidget)
self.lineEdit.setObjectName(u"lineEdit")
self.lineEdit.setStyleSheet(u"QLineEdit {\n"
"border: 2px solid #141414;\n"
"border-radius: 10px;\n"
"background-color: #212121;\n"
"color: White\n"
"}")
self.gridLayout.addWidget(self.lineEdit, 0, 4, 1, 1)
self.settingsbutton = QPushButton(self.centralwidget)
self.buttonGroup = QButtonGroup(MainWindow)
self.buttonGroup.setObjectName(u"buttonGroup")
self.buttonGroup.addButton(self.settingsbutton)
self.settingsbutton.setObjectName(u"settingsbutton")
self.settingsbutton.setStyleSheet(u"color: #bfbfbf;")
icon = QIcon()
icon.addFile(u"res/pictures/settings.png", QSize(), QIcon.Normal, QIcon.Off)
self.settingsbutton.setIcon(icon)
self.gridLayout.addWidget(self.settingsbutton, 0, 6, 1, 1)
self.searchbutton = QPushButton(self.centralwidget)
self.buttonGroup.addButton(self.searchbutton)
self.searchbutton.setObjectName(u"searchbutton")
self.searchbutton.setStyleSheet(u"color: #bfbfbf; ")
icon1 = QIcon()
icon1.addFile(u"res/pictures/search.png", QSize(), QIcon.Normal, QIcon.Off)
self.searchbutton.setIcon(icon1)
self.gridLayout.addWidget(self.searchbutton, 0, 5, 1, 1)
self.horizontalLayout_3 = QHBoxLayout()
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
self.gridLayout.addLayout(self.horizontalLayout_3, 0, 0, 1, 1)
self.achievementbutton_2 = QPushButton(self.centralwidget)
self.buttonGroup.addButton(self.achievementbutton_2)
self.achievementbutton_2.setObjectName(u"achievementbutton_2")
self.achievementbutton_2.setStyleSheet(u"color: #bfbfbf;\n"
"border: 2px solid #141414;\n"
"border-radius: 2px;")
icon2 = QIcon()
icon2.addFile(u"res/pictures/favorite.png", QSize(), QIcon.Normal, QIcon.Off)
self.achievementbutton_2.setIcon(icon2)
self.gridLayout.addWidget(self.achievementbutton_2, 0, 1, 1, 1)
self.folderbutton = QPushButton(self.centralwidget)
self.buttonGroup.addButton(self.folderbutton)
self.folderbutton.setObjectName(u"folderbutton")
self.folderbutton.setStyleSheet(u"color: #bfbfbf; ")
icon3 = QIcon()
icon3.addFile(u"res/pictures/folder.png", QSize(), QIcon.Normal, QIcon.Off)
self.folderbutton.setIcon(icon3)
self.gridLayout.addWidget(self.folderbutton, 0, 3, 1, 1)
self.achievementbutton = QPushButton(self.centralwidget)
self.buttonGroup.addButton(self.achievementbutton)
self.achievementbutton.setObjectName(u"achievementbutton")
self.achievementbutton.setStyleSheet(u"color: #bfbfbf; ")
icon4 = QIcon()
icon4.addFile(u"res/pictures/achievement.png", QSize(), QIcon.Normal, QIcon.Off)
self.achievementbutton.setIcon(icon4)
self.gridLayout.addWidget(self.achievementbutton, 0, 2, 1, 1)
self.listWidget = QListWidget(self.centralwidget)
self.listWidget.setObjectName(u"listWidget")
self.listWidget.viewport().setProperty("cursor", QCursor(Qt.ArrowCursor))
self.listWidget.setToolTipDuration(-5)
self.listWidget.setAutoFillBackground(False)
self.listWidget.setStyleSheet(u"#listWidget {\n"
" border: 2px solid #141414;\n"
" background-color: #212121;\n"
" border-radius: 20px;\n"
"}\n"
"#listWidget::item {\n"
" background-color: #212121; \n"
"} \n"
"#listWidget::item:selected { /* <---- */ \n"
" background-color: #0f0f0f; /* <---- */ \n"
"} \n"
"#listWidget::item:hover { /* <---- */ \n"
" background-color: #0f0f0f; /* <---- */ \n"
"}")
self.listWidget.setFrameShape(QFrame.NoFrame)
self.listWidget.setFrameShadow(QFrame.Plain)
self.listWidget.setLineWidth(0)
self.listWidget.setMovement(QListView.Static)
self.listWidget.setResizeMode(QListView.Fixed)
self.listWidget.setSortingEnabled(False)
self.gridLayout.addWidget(self.listWidget, 1, 0, 1, 7)
self.horizontalLayout.addLayout(self.gridLayout)
MainWindow.setCentralWidget(self.centralwidget)
# !!! НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
'''
self.pixmap = QPixmap()
i = 0
listdata = [
{
"title": "Название",
"description": "Описание",
"icon": "Ok.png",
},
]
for list in listdata:
customQWidget = CustomQWidget()
customQWidget.setTitle(list["title"])
customQWidget.setDescription(list["description"])
customQWidget.setIcon(list["icon"])
item = QtWidgets.QListWidgetItem(self.listWidget)
item.setSizeHint(customQWidget.sizeHint())
self.listWidget.addItem(item)
item.setData(1, i)
self.listWidget.setItemWidget(item, customQWidget)
i += 1
censored = False
self.listWidget.itemClicked.connect(self.Clicked)
# !!!
'''
self.retranslateUi(MainWindow)
QMetaObject.connectSlotsByName(MainWindow)
# setupUi
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
self.settingsbutton.setText("")
self.searchbutton.setText("")
self.achievementbutton_2.setText(
QCoreApplication.translate("MainWindow", u"\u0418\u0437\u0431\u0440\u0430\u043d\u043d\u043e\u0435", None))
self.folderbutton.setText(
QCoreApplication.translate("MainWindow", u"\u041a\u0430\u0442\u0430\u043b\u043e\u0433", None))
self.achievementbutton.setText(
QCoreApplication.translate("MainWindow", u"\u0414\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f", ))
# !!! НИКОГДА НЕ ИЗМЕНЯЙТЕ код, сгенерированный Qt Designer, НИКОГДА.
'''
def Clicked(self):
self.listWidget.clear()
customqwidget2 = Ui_Widget()
customqwidget2.setTitle("Тут название")
customqwidget2.setDescription("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum")
customqwidget2.setIcon("ok.png")
item = QtWidgets.QListWidgetItem(self.listWidget)
item.setSizeHint(customqwidget2.sizeHint())
self.listWidget.addItem(item)
self.listWidget.setItemWidget(item, customqwidget2)
'''
# Создайте другой класс, который наследуется от соответствующего виджета,
# и используйте созданный класс для его заполнения.
class CustomqWidget2(QtWidgets.QWidget, Ui_Widget):
def __init__(self, parent=None):
super(CustomqWidget2, self).__init__(parent)
self.setupUi(self)
def setTitle(self, text):
self.titlelabel_2.setText(text)
def setDescription(self, text):
self.descriptionlabel_2.setText(text)
def setIcon(self, imagePath):
self.iconlabel_2.setPixmap(QtGui.QPixmap(imagePath).scaled(
160, 210))
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self):
super(MainWindow, self).__init__()
# self.ui = Ui_MainWindow()
# self.ui.setupUi(self)
self.setupUi(self)
# !!!
self.pixmap = QPixmap()
i = 0
listdata = [
{
"title": "Название",
"description": "Описание",
"icon": "Ok.png",
},
]
for list in listdata:
customQWidget = CustomQWidget()
customQWidget.setTitle(list["title"])
customQWidget.setDescription(list["description"])
customQWidget.setIcon(list["icon"])
item = QtWidgets.QListWidgetItem(self.listWidget)
item.setSizeHint(customQWidget.sizeHint())
self.listWidget.addItem(item)
item.setData(1, i)
self.listWidget.setItemWidget(item, customQWidget)
i += 1
censored = False
self.listWidget.itemClicked.connect(self.item_clicked)
# !!!
def item_clicked(self):
self.listWidget.clear()
# customqwidget2 = Ui_Widget()
customqwidget2 = CustomqWidget2() # !!!
customqwidget2.setTitle("Тут название")
customqwidget2.setDescription("""Lorem Ipsum is simply dummy text of the \
printing and typesetting industry. Lorem Ipsum has been the industry's standard \
dummy text ever since the 1500s, when an unknown printer took a galley of type and \
scrambled it to make a type specimen book. It has survived not only five centuries, \
but also the leap into electronic typesetting, remaining essentially unchanged. \
It was popularised in the 1960s with the release of Letraset sheets containing \
Lorem Ipsum passages, and more recently with desktop publishing software like \
Aldus PageMaker including versions of Lorem Ipsum""")
customqwidget2.setIcon("im.png")
item = QtWidgets.QListWidgetItem(self.listWidget)
item.setSizeHint(customqwidget2.sizeHint())
self.listWidget.addItem(item)
self.listWidget.setItemWidget(item, customqwidget2)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec())

