【发布时间】:2011-02-21 21:19:44
【问题描述】:
我正在寻找一种在 pyqt 中设置多个定时函数调用的方法,并在需要时取消所有挂起的调用。
我正在考虑使用QtCore.QTimer 来设置函数调用,但我不知道有什么好的方法可以取消这些调用。有什么想法吗?
使用QtCore.QTimer.singleShot(1000, self.function) 后,我似乎找不到任何取消的方法。相反,如果我创建一个 QTimer 对象列表,我可以停止它们,但是我不得不管理一个计时器对象列表(创建、删除、活动等),我想避免这种情况。
# Setup a timer object.
timer = QtCore.QTimer(self)
timer.timeout.connect(self.function)
timer.setSingleShot(True)
timer.start(1000)
# To stop the timer object at some later point.
timer.stop()
我还可以管理自己的待处理函数调用队列,如果可能的话,我也想避免这种情况(为了简单起见)。
这是一些虚拟代码,显示了我正在尝试做的事情:
import sys
from PyQt4 import QtCore
class Test(QtCore.QObject):
def __init__(self, parent=None):
QtCore.QObject.__init__(self, parent)
def addDelayedCall(self, time, function):
# Do something here.
pass
def clearPendingCalls(self):
print(' Clearing pending function calls.')
# Do something here.
def setupCalls(self):
self.addDelayedCall(500, self.dummy)
self.addDelayedCall(1000, self.dummy)
self.addDelayedCall(1500, self.dummy)
self.addDelayedCall(2000, self.dummy)
def dummy(self):
print('dummy just got called.')
if __name__ == '__main__':
app = QtCore.QCoreApplication(sys.argv)
test = Test(app)
QtCore.QTimer.singleShot(0, test.setupCalls)
QtCore.QTimer.singleShot(1250, test.clearPendingCalls)
QtCore.QTimer.singleShot(5000, app.quit)
sys.exit(app.exec_())
【问题讨论】: