2016-12-24 191 views
1
  1. QTimer.singleShot()タイマーを停止することはできますか? (私はQTimerオブジェクトのstop()機能を使用するために を教えないでください - 私は本当に したい その時間が経過する前に、静的関数QTimer.singleShot()を停止させることができるかどうかを知る)は、第2のQTimer.singleShot()どうなりQTimer.singleShot()タイマーを停止する

  2. を最初に経過した の前に開始されますか?最初のものが殺されたのですか、あるいはもう1つ目のものが でしたか? 最初の1が経過する前に、第2 QTimer.singleShot()が起動された場合はどうなり

+0

あなたは[ヘールトVancompernolle](http://www.riverbankcomputing.com/pipermail/pyqt/20​​09-February/です022023.html)私は自分の€5を請求します。 – ekhumoro

+0

[QtCore.QTimerをPyQt4で1回だけ殺すにはどうすればいいですか?](http://stackoverflow.com/questions/21079941/how-can-i-kill-a-single-shot-qtcore-qtimer- in-pyqt4) –

+0

@ three_pineapples。これは、スタティック関数を使用して開始された単発タイマーの停止に関する疑問に確実には答えません。 – ekhumoro

答えて

0

Q.?最初の人が殺されたのですか、それとももう1人ですか? が代わりに開始されましたか?

  • すべてのタイマーは独立して動作するので、2つの連続して開始された場合、両方が完了するまで実行されます。

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_()) 
    
関連する問題