正确使用PyQt计时器/睡眠

时间:2014-04-26 18:35:47

标签: python qt timer pyqt sleep

如何正确使用QtTimer?

我有一个按钮连接到一个基本上做一些数学的方法,但是我想迭代它并一次看一个结果,它们之间有1秒的延迟。

在正常的脚本中,我会使用

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

但是在GUI中它不起作用,因为它冻结了GUI,我看不到结果。仅在10秒后,我才看到最后一次迭代。

我尝试了QtTimer,但似乎没有用。

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

它直接进入最后一次迭代。我错过了什么吗?

1 个答案:

答案 0 :(得分: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代码,这只是 伪代码。我从未测试过,但这个概念在我看来是有效的。