Можно ли остановить таймер
QTimer.singleShot()
? (Пожалуйста, не говорите мне использоватьstop()
функциюQTimer
объекта - Я действительно хочу знать, если статическая функцияQTimer.singleShot()
может быть остановлена до его время истекло)Остановить таймер QTimer.singleShot()Что произойдет, если второй
QTimer.singleShot()
запускается до первого ? Первый убит или второй - ?
1
A
ответ
0
В. Что произойдет, если второй QTimer.singleShot() запускается до первый один прошло? Первый убит или второй - ?
- Все таймеры работают независимо друг от друга, так что если два запускаются последовательно, и будет работать до завершения.
Q. Можно ли остановить таймер QTimer.singleShot()? (Пожалуйста, не говорите мне использовать функцию останова() объекта QTimer - Я действительно хочу знать, если статическая функция QTimer.singleShot() может быть остановлен до его время истекло)
Статическая функция создает внутренний объект, который обрабатывает таймер, поэтому для его остановки нет открытого API. Однако есть взлом с участием
QAbstractEventDispatcher
, который может обойти это ограничение. Он опирается на детали реализации, поэтому не рекомендуется, чтобы это использовалось в производственном коде. Но вы спросили, было ли это возможно, так вот демо:from PyQt4 import QtCore, QtGui class Window(QtGui.QWidget): def __init__(self): super(Window, self).__init__() self.button = QtGui.QPushButton('Start', self) self.button.clicked.connect(self.handleTimer) self.edit = QtGui.QLineEdit(self) self.edit.setReadOnly(True) layout = QtGui.QVBoxLayout(self) layout.addWidget(self.button) layout.addWidget(self.edit) self._timer = None def handleTimer(self): dispatcher = QtCore.QAbstractEventDispatcher.instance() if self._timer is None: self.edit.clear() self.button.setText('Stop') QtCore.QTimer.singleShot(3000, self.handleTimeout) self._timer = dispatcher.children()[-1] else: dispatcher = QtCore.QAbstractEventDispatcher.instance() dispatcher.unregisterTimers(self._timer) self.button.setText('Start') self._timer = None def handleTimeout(self): self._timer = None self.button.setText('Start') self.edit.setText('timeout') if __name__ == '__main__': import sys app = QtGui.QApplication(sys.argv) window = Window() window.setGeometry(500, 150, 300, 100) window.show() sys.exit(app.exec_())
Вы [Герт Vancompernolle] (http://www.riverbankcomputing.com/pipermail/pyqt/2009-February/ 022023.html), и я требую свои 5 евро. – ekhumoro
Возможный дубликат [Как я могу убить один выстрел QtCore.QTimer в PyQt4?] (Http://stackoverflow.com/questions/21079941/how-can-i-kill-a-single-shot-qtcore-qtimer- in-pyqt4) –
@three_pineapples. Это не дает окончательного ответа на вопрос об остановке таймеров с одним выстрелом, которые начали использовать статическую функцию. – ekhumoro