2016-12-24 15 views
1
  1. Можно ли остановить таймер QTimer.singleShot()? (Пожалуйста, не говорите мне использовать stop() функцию QTimer объекта - Я действительно хочу знать, если статическая функция QTimer.singleShot() может быть остановлена ​​до его время истекло)Остановить таймер QTimer.singleShot()

  2. Что произойдет, если второй QTimer.singleShot() запускается до первого ? Первый убит или второй - ?

+0

Вы [Герт Vancompernolle] (http://www.riverbankcomputing.com/pipermail/pyqt/2009-February/ 022023.html), и я требую свои 5 евро. – ekhumoro

+0

Возможный дубликат [Как я могу убить один выстрел QtCore.QTimer в PyQt4?] (Http://stackoverflow.com/questions/21079941/how-can-i-kill-a-single-shot-qtcore-qtimer- in-pyqt4) –

+0

@three_pineapples. Это не дает окончательного ответа на вопрос об остановке таймеров с одним выстрелом, которые начали использовать статическую функцию. – ekhumoro

ответ

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_()) 
    

 Смежные вопросы

  • Нет связанных вопросов^_^