Как обновить 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

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

→ Ссылка