PyQt 5: условие с QLabel.setText() не меняет значение на форме, как исправить?

Добрый день!
Есть вот такой код:
def function1(self, args=None):
        groupBox = QGroupBox("Титле")
        vbox = QVBoxLayout()
        vbox.addStretch(1)
        groupBox.setLayout(vbox)
        
        integerLabel = QLabel('test')
        vbox.addWidget(integerLabel)
        print('свойство сейчас:' + integerLabel.text())
        if args is not None:
            integerLabel.setText('1')
            print('Тест попадения функции')
            print('Поменялось на:' + args)
        print('свойство сейчас 2:' + integerLabel.text())

Логика такая, в функции function1() создается поле QLabel с текстом "test", так же аргумент args=None. Далее на форме есть кнопки, при нажатие которой вызывается другая функция, получает внутри себя некоторое значение и запускает function1 уже с args не равно None, срабатывает условие if. Но условие .setText не меняет значение QLabel на форме. В консоль явно видно что значение поменялось, но визуального отображения на форме нету.
Не могу понять что я делаю не так :)
Прошу помощи.
  • Вопрос задан
  • 4853 просмотра
Решения вопроса 1
phoenixbk
@phoenixbk
Здравствуйте!
А где "groupBox" добавляется в окно? Сделал простенький вариант с классном на основе QWidget. Всё отображается как надо.
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QGroupBox, QVBoxLayout, QLabel, QPushButton

class Example(QWidget):
    def __init__(self):
        super().__init__()
        l = QVBoxLayout()
        b = QPushButton('Добавить без параметра!')
        b.clicked.connect(lambda: self.function1())
        b2 = QPushButton('Добавить с параметром!')
        b2.clicked.connect(lambda: self.function1(args='параметр'))
        l.addWidget(b)
        l.addWidget(b2)
        self.setLayout(l)
        self.show()

    def function1(self, args=None):
        groupBox = QGroupBox("Титле")
        vbox = QVBoxLayout()
        vbox.addStretch(1)
        groupBox.setLayout(vbox)

        integerLabel = QLabel('test')
        vbox.addWidget(integerLabel)
        print('свойство сейчас:' + integerLabel.text())
        if args is not None:
            integerLabel.setText('1')
            print('Тест попадения функции')
            print('Поменялось на:' + args)
        print('свойство сейчас 2:' + integerLabel.text())
        self.layout().addWidget(groupBox)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    w = Example()
    w.resize(250, 150)
    w.setWindowTitle('Simple')
    w.show()
    sys.exit(app.exec_())
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы