Как обновить QLabel?
def setTheme(self):
backgroundImage = config.get("Theme","background")
background = QtWidgets.QLabel(self)
background.setMinimumSize(QtCore.QSize(252, 424))
background.setMaximumSize(QtCore.QSize(252, 424))
if backgroundImage == 'default':
background.setStyleSheet("image: url(data/images/background.png);")
elif backgroundImage == 'dark':
background.setStyleSheet("image: url(data/images/background2.png);")
background.show()
Собственно. В другом классе я меняю значение background и снова вызываю метод setTheme. Однако изображение не меняется, хотя backgroundImage уже с нужным значением.
Ответы (2 шт):
Автор решения: eri
→ Ссылка
тут вы создаете новый QLabel при установки темы.
Уложите его в атрибут класса там где вы его создаете в первый раз, а потом
self.background_label.setStyleSheet(...)
self.background_label.update()
С внешнего класса лучше сделать signal-slot на классе c backgroundLabel
class Window1(QObject):
@pyqtSlot(str)
def setTheme(self, backgroundImage):
self.backgroundLabel.setStyleSheet(...)
self.backgroundLabel.update()
на классе с настройками
class Window2(QObject):
on_theme_changed = pyqtSignal(str)
def onChanged(self):
# ... обработать сеттингс тут чтоб не таскать в другие классы
self.on_theme_changed.emit(backgroundImage)
Инит
w1 = Window1()
w2 = Window2()
w2.on_theme_changed.connect(w1.setTheme)
Автор решения: S. Nick
→ Ссылка
Я увидел вашу задачу так:
main.py
import os
import configparser
from PyQt5.Qt import *
class MainWindow(QMainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setWindowTitle("Votre territoire")
listCom = self.getComINSEE()
self.cbCommunes = QComboBox()
self.cbCommunes.addItems(listCom)
self.cbCommunes.currentIndexChanged.connect(self.selectionChange)
self.backgroundLabel = QLabel(self)
self.backgroundLabel.setFixedSize(QSize(252, 424))
centralwidget = QWidget()
self.setCentralWidget(centralwidget)
layout = QVBoxLayout(centralwidget)
layout.addWidget(self.cbCommunes)
layout.addWidget(self.backgroundLabel)
self.themeBackground = 'default'
if os.path.exists('settingTheme.ini'):
config = configparser.ConfigParser()
config.read("settingTheme.ini")
self.themeBackground = config.get('Theme', 'background')
if self.themeBackground == 'default':
self.backgroundLabel.setStyleSheet("image: url(lena-2.png);")
elif backgroundImage == 'dark':
self.backgroundLabel.setStyleSheet("image: url(lena.jpg);")
def getComINSEE(self):
com = ['default', 'dark',]
return com
def selectionChange(self, i):
text = self.cbCommunes.currentText()
if text == 'default':
self.backgroundLabel.setStyleSheet("image: url(lena-2.png);")
elif text == 'dark':
self.backgroundLabel.setStyleSheet("image: url(lena.jpg);")
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
settingTheme.ini
[Theme]
background = default
