Как последовательно менять текст в QLabel
Хотелось бы чтобы когда человек нажимал на кнопку, то высвечивался текст "Donone!", а затем уже "Успешно!", но какие костыли бы я не применял, чтобы сначала высвечивался один текст, а затем уже он заменялся другим - всё безрезультатно. Питон будто нарочно обходит self.ui.label_14.setText("Donone!") выводя самый последний текст self.ui.label_14.setText("Успешно!").
Что я делаю не так?
def button_clicked(self): # блок команд, выполняющийся при нажатии кнопки
print(1)
self.ui.label_14.setText("Donone!")
self.ui.label_14
time.sleep(1)
print(2)
self.ui.label_14.setText("Успешно!")
self.ui.label_14
Ответы (3 шт):
У pyqt5 есть класс QBasicTimer, думаю он может решить вашу проблему
Питон не виноват (такое же поведение вы получите и в Qt на С++, и на любом другом языке) - виджеты обновляются/перерисовываются после завершения работы соответствующего метода который их изменяет, в данном случае button_clicked. Соответственно, когда метод завершается в метке остается последнее установленное значение. Ну и следовательно, чтобы увидеть изменение текста в метке нам надо где-то раздобыть два метода (либо иметь параллельное изменение в GUI из работающего метода другого потока, но это не наш случай).
Вот так должно сработать (метод QTimer.singleShot):
def button_clicked(self):
self.ui.label_14.setText("Done!")
# обновляем метку с текстом
self.repaint() # без этого вызова тоже должно работать нормально
# через одну секунду вызовем лямбду и обновим метку снова
QTimer.singleShot(1000, lambda: self.ui.label_14.setText("Успешно!"))