Как увидеть более одного изменения в одной и той же функции при использовании сна в Python PySide2

Я пытаюсь выполнить более одного действия в одной функции. В приведенном ниже коде вы увидите страницу окна с кнопкой и меткой. Я хочу видеть «СИНИЙ», а через 2 секунды сна я хочу видеть «КРАСНЫЙ» текст на своей этикетке. Но когда я нажимаю кнопку, все функции работают как блок, и после двух секунд slepp текст метки меняется на «КРАСНЫЙ». Да, сначала он меняется на СИНИЙ, но я этого не вижу, потому что это слишком быстро. Как я могу это исправить?

class Form(QDialog):

def __init__(self, parent=None):
    super(Form, self).__init__(parent)
    #label is Hello now
    self.label=QLabel("Hello")
    self.button = QPushButton("Change it")
    layout = QVBoxLayout()
    layout.addWidget(self.label)
    layout.addWidget(self.button)
    self.setLayout(layout)
    self.button.clicked.connect(self.func)
def func(self):
    self.label.setText("BLUE")
    time.sleep(2)
    self.label.setText("RED")

изменить time.sleep(2) self.label.setText("RED") на QTimer.singleShot(2*1000, lambda: self.label.setText("RED"))

eyllanesc 08.04.2019 13:35

Это сработало, и спасибо, что поделились другим ответом. Это помогло мне понять с python

hhilal 08.04.2019 14:36
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

void QTimer::singleShot(int msec, const QObject *receiver, const char *member)

This static function calls a slot after a given time interval.

from PyQt5.QtCore    import *
from PyQt5.QtGui     import *
from PyQt5.QtWidgets import *

class Form(QDialog):

    def __init__(self, parent=None):
        super(Form, self).__init__(parent)
        
        #label is Hello now
        self.label  = QLabel("Hello")
        self.button = QPushButton("Change it")
        self.button.clicked.connect(self.func)
        
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.button)
        self.setLayout(layout)
        
    def func(self):
        self.label.setText("BLUE")
#        QApplication.processEvents()      
#        QThread.msleep(2000)              
#        self.label.setText("RED")
        QTimer.singleShot(2000, lambda : self.label.setText("RED"))       # <----
    
if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    w = Form()
    w.show()
    sys.exit(app.exec_())

большое спасибо, вы спасли мне жизнь

hhilal 08.04.2019 13:17

@hhilal Это ужасное решение, так как вы не должны использовать сон в python, например, попробуйте изменить размер окна за эти 2 секунды.

eyllanesc 08.04.2019 13:34

Я исправил свой пример после замечаний @eyllanesc

S. Nick 08.04.2019 14:13

Другие вопросы по теме