Отменить все невыполненные события QTimer

Я ищу способ настроить количество синхронизированных вызовов функций в 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_())
7
задан amicitas 21 February 2011 в 23:28
поделиться