PyQt定时器/休眠的正确使用

2 投票
1 回答
3227 浏览
提问于 2025-04-18 04:23

我该如何正确使用QtTimer?

我有一个按钮,点击后会连接到一个方法,这个方法基本上是做一些数学运算,但我想逐个查看结果,每个结果之间有1秒的延迟。

在普通的脚本中,我会使用

for i in xrange(10):
   domath(i)
   sleep(1)

但是在图形界面中这样做不行,因为它会让界面卡住,我根本看不到结果。只有等到10秒后,我才能看到最后一个结果。

我试过使用QtTimer,但好像不太管用。

for i in xrange(10):
    QtCore.QTimer.singleShot(1000,lambd: domath(i))

它直接跳到最后一个结果。我是不是漏掉了什么?

1 个回答

3

我个人会写成这样:

class A(QObject):
    def __init__(self):
        self.counter = 0
        Timer.singleShot(100, self.domath())

    Slot()
    def domath(self):
        # do the computation
        self.counter += 1
        if self.counter != 10:
            Timer.singleShot(100, self.domath())
        else:
            self.counter = 0;

注意:虽然这看起来像是PyQt的代码,但这其实是伪代码。我从来没有测试过这些代码等等,但我认为这个概念是有效的。

撰写回答