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