【问题标题】:time.sleep() crashes program when using while-loop in PyQt在 PyQt 中使用 while-loop 时 time.sleep() 使程序崩溃
【发布时间】:2020-04-15 15:52:21
【问题描述】:

当我在终端中使用函数 time.sleep() 时,没有问题。 当我使用 PyQt 并想使用标签时,它会崩溃和/或只显示最后一个数字。

顺便说一句:我想要一个功能,例如从 2020 年到 2030 年的一年,以不同的速度,用户可以更改,并且应该在标签中显示年份。

非常感谢您的帮助。

# timer that counts in the future with various speed // still crashing
def timer(self):
    x=datetime.datetime.now()
    z=x.ctime()
    self.ui.labelDateTime.setText(z)
    var=x.year
    while True:
        if var==2030:
            break
        else:
            var+=1
            y=x.replace(year=var)
            z=y.ctime()
            self.ui.labelDateTime.setText(z)
            time.sleep(0.5)
    print("You are dead")

【问题讨论】:

    标签: python pyqt


    【解决方案1】:

    您应该在 for 循环中调用 QtCore.QCoreApplication.processEvents() 以使 Qt 的事件循环继续传入事件(来自键盘、鼠标或睡眠)。

    虽然调用QtCore.QCoreApplication.processEvents() 有效,但我在网络上的许多地方都读到它应该是最后的手段。不幸的是,没有一个消息来源清楚地解释了原因——但请参见示例

    所以这似乎是允许的,但总的来说,使用QTimerQThread 似乎是更好的设计。

    【讨论】:

    • "QtTest.QTest.qWait(millisec)" 是我的程序具有最佳 GUI 性能的最佳解决方案^^
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2016-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多