Я ищу способ настроить количество синхронизированных вызовов функций в 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_())