Изменение фона label с помощью listwidget pyqt5
у меня есть код простенького приложения, в котором натянут label по низ всех слоев - черного цвета.
Еще есть функция - при нажатии на кнопку, на которой написано "меню" открывается listwidget. В "меню" я попытался сделать такую функцию, чтобы при нажатии "Светлая тема" в lsitwidget фон label на главном окне меняется на белый.
Я хочу сделать так, чтобы после нажатия "светлая тема" этот текст в listwidget заменялся на "темная тема" и после клика на "темная тема" фон изменялся обратно на черный. Как это сделать?
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
from PyQt5.Qt import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1098, 600)
MainWindow.setMinimumSize(QtCore.QSize(1098, 600))
MainWindow.setMaximumSize(QtCore.QSize(1098, 600))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(340, 310, 441, 131))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(0, 0, 61, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 0, 1101, 601))
self.label.setStyleSheet("background-color: rgb(0, 0, 0);")
self.label.setText("")
self.label.setObjectName("label")
self.frame1 = QtWidgets.QFrame(self.centralwidget)
self.frame1.setGeometry(QtCore.QRect(-1, -1, 321, 601))
self.frame1.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame1.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame1.setObjectName("frame1")
self.frame2 = QtWidgets.QFrame(self.centralwidget)
self.frame2.setGeometry(QtCore.QRect(0, 0, 1101, 601))
self.frame2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame2.setObjectName("frame2")
self.label.raise_()
self.pushButton.raise_()
self.pushButton_2.raise_()
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.pushButton_2.setText(_translate("MainWindow", "меню"))
class ListWidget(QtWidgets.QListWidget):
def itClicked(self, item):
QtWidgets.QMessageBox.information(
None,
"ListWidget",
"click: {}".format(item.text())
)
class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_2.setCheckable(True)
self.pushButton_2.click()
self.pushButton_2.installEventFilter(self)
self.listWidget = ListWidget()
self.listWidget.insertItem(0, "Светлая тема")
self.listWidget.insertItem(1, "Настройки")
self.listWidget.insertItem(2, "Справка")
self.listWidget.itemClicked.connect(self.openWindow)
self.listWidget.setFrameShape(QtWidgets.QFrame.NoFrame)
self.listWidget.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.listWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.listWidget.setFont (QFont ("Helvetica", 20));
self.listWidget.setStyleSheet("QListWidget::item:hover {background: rgba(158, 158, 158, 40);}\n"
"QListWidget::item:selected {background: transparent;}\n"
"QListWidget::item:selected {color: black;}\n"
"")
lay = QtWidgets.QVBoxLayout(self.frame2)
lay.addWidget(self.listWidget)
lay.setContentsMargins(0, 30, 0, 0)
self._animation = QtCore.QPropertyAnimation(self.frame2, b'size', self)
self._animation.setStartValue(QtCore.QSize(0, self.height()))
self._animation.setEndValue(QtCore.QSize(200, self.height()))
self._animation.setDuration(200)
def eventFilter(self, watched, event):
if self.pushButton_2 is watched:
if event.type() == 2 and self.pushButton_2.isChecked():
self.frame2.raise_()
self.pushButton_2.raise_()
self._animation.setDirection(QtCore.QAbstractAnimation.Forward)
self._animation.start()
if event.type() == 2 and (not self.pushButton_2.isChecked()):
self._animation.setDirection(QtCore.QAbstractAnimation.Backward)
self._animation.start()
return super(ExampleApp,self).eventFilter(watched, event)
def openWindow(self, item):
self.widget = QtWidgets.QWidget()
if item.text() == "Светлая тема":
self.label.setStyleSheet("background-color: white;")
if __name__=="__main__":
app = QtWidgets.QApplication(sys.argv)
window = ExampleApp()
window.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так:
....
def openWindow(self, item):
# ? self.widget = QtWidgets.QWidget()
if item.text() == "Светлая тема":
self.label.setStyleSheet("background-color: white;")
self.listWidget.removeItemWidget(item)
self.listWidget.takeItem(0)
self.listWidget.setCurrentRow(0)
self.listWidget.insertItem(0, "Темная тема")
if item.text() == "Темная тема":
self.listWidget.removeItemWidget(item)
self.listWidget.takeItem(0)
self.listWidget.setCurrentRow(0)
self.listWidget.setCurrentRow(0)
self.listWidget.insertItem(0, "Светлая тема")
self.label.setStyleSheet("background-color: black;")
...
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1098, 600)
MainWindow.setMinimumSize(QtCore.QSize(1098, 600))
MainWindow.setMaximumSize(QtCore.QSize(1098, 600))
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(340, 310, 441, 131))
self.pushButton.setObjectName("pushButton")
self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_2.setGeometry(QtCore.QRect(0, 0, 61, 23))
self.pushButton_2.setObjectName("pushButton_2")
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(0, 0, 1101, 601))
self.label.setStyleSheet("background-color: rgb(0, 0, 0);")
self.label.setText("")
self.label.setObjectName("label")
self.frame1 = QtWidgets.QFrame(self.centralwidget)
self.frame1.setGeometry(QtCore.QRect(-1, -1, 321, 601))
self.frame1.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame1.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame1.setObjectName("frame1")
self.frame2 = QtWidgets.QFrame(self.centralwidget)
self.frame2.setGeometry(QtCore.QRect(0, 0, 1101, 601))
self.frame2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame2.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame2.setObjectName("frame2")
self.label.raise_()
self.pushButton.raise_()
self.pushButton_2.raise_()
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
self.pushButton_2.setText(_translate("MainWindow", "меню"))
class ListWidget(QtWidgets.QListWidget):
def itClicked(self, item):
QtWidgets.QMessageBox.information(
None,
"ListWidget",
"click: {}".format(item.text())
)
class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.pushButton_2.setCheckable(True)
self.pushButton_2.click()
self.pushButton_2.installEventFilter(self)
self.listWidget = ListWidget()
self.listWidget.insertItem(0, "Светлая тема")
self.listWidget.insertItem(1, "Настройки")
self.listWidget.insertItem(2, "Справка")
self.listWidget.itemClicked.connect(self.openWindow)
self.listWidget.setFrameShape(QtWidgets.QFrame.NoFrame)
self.listWidget.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.listWidget.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
self.listWidget.setFont (QFont ("Helvetica", 20));
self.listWidget.setStyleSheet("QListWidget::item:hover {background: rgba(158, 158, 158, 40);}\n"
"QListWidget::item:selected {background: transparent;}\n"
"QListWidget::item:selected {color: black;}\n"
"")
lay = QtWidgets.QVBoxLayout(self.frame2)
lay.addWidget(self.listWidget)
lay.setContentsMargins(0, 30, 0, 0)
self._animation = QtCore.QPropertyAnimation(self.frame2, b'size', self)
self._animation.setStartValue(QtCore.QSize(0, self.height()))
self._animation.setEndValue(QtCore.QSize(200, self.height()))
self._animation.setDuration(200)
def eventFilter(self, watched, event):
if self.pushButton_2 is watched:
if event.type() == 2 and self.pushButton_2.isChecked():
self.frame2.raise_()
self.pushButton_2.raise_()
self._animation.setDirection(QtCore.QAbstractAnimation.Forward)
self._animation.start()
if event.type() == 2 and (not self.pushButton_2.isChecked()):
self._animation.setDirection(QtCore.QAbstractAnimation.Backward)
self._animation.start()
return super(ExampleApp,self).eventFilter(watched, event)
def openWindow(self, item):
# ? self.widget = QtWidgets.QWidget()
if item.text() == "Светлая тема":
self.label.setStyleSheet("background-color: white;")
self.listWidget.removeItemWidget(item)
self.listWidget.takeItem(0)
self.listWidget.setCurrentRow(0)
self.listWidget.insertItem(0, "Темная тема")
if item.text() == "Темная тема":
self.listWidget.removeItemWidget(item)
self.listWidget.takeItem(0)
self.listWidget.setCurrentRow(0)
self.listWidget.setCurrentRow(0)
self.listWidget.insertItem(0, "Светлая тема")
self.label.setStyleSheet("background-color: black;")
if __name__=="__main__":
app = QtWidgets.QApplication(sys.argv)
window = ExampleApp()
window.show()
sys.exit(app.exec_())
