

pyqt5のpressedを使い、押した時間分だけ命令が実行される方法を探しております。

どうか、ご教授お願い致します。


CC BY-SA 3.0
2017-02-14T00:15:49.100
32648
2017-02-14T03:33:02.630
20643
question
python3
PyQt5のボタンで押した時間分だけ入力される方法


QAbstractButtonクラス（QPushButtonクラスのスーパークラス）のsetAutoRepeatメソッドにTrueを指定することで、ボタンを押しっぱなしにした際にpressed,
released, clickedシグナルが一定間隔で発生するようになります。  
<https://doc.qt.io/qt-5/qabstractbutton.html#autoRepeat-prop>

setAutoRepeatDelayメソッドで押しっぱなしと判断するまでの時間を、autoRepeatIntervalメソッドで発生させるシグナルの間隔を指定します。両方とも、引数はミリ秒で指定します。

コード例を示します。

[code]

    import sys
    from PyQt5.QtWidgets import QMainWindow, QPushButton, QApplication
    
    
    class Example(QMainWindow):
    
        def __init__(self):
            super().__init__()
            self.initUI()
            self.counter = 0
    
        def initUI(self):
            btn2 = QPushButton("Button", self)
            btn2.move(50, 50)
            btn2.setAutoRepeat(True)
            btn2.setAutoRepeatDelay(1000)  # 1秒
            btn2.setAutoRepeatInterval(300)  # 300ミリ秒
    
            btn2.pressed.connect(self.updateStatusBar)
    
            self.statusBar()
            self.setGeometry(300, 300, 200, 150)
            self.show()
    
    
        def updateStatusBar(self):
            self.counter += 1
            msg = self.sender().text() + ' was pressed... {}'.format(self.counter)
            self.statusBar().showMessage(msg)
    
    
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        ex = Example()
        sys.exit(app.exec_())
    
[/code]

画面に表示されるButtonを1秒以上押しっぱなしにすると、ステータスバーのテキストの末尾の数値が300ミリ秒ごとにインクリメントされることが確認できると思います。


CC BY-SA 3.0
2017-02-14T03:33:02.630
32659
2017-02-14T03:33:02.630
3481
32648
answer