2015/04/25

PyQt5を使う (シグナルとスロットの接続)

ユーザ操作に対する応答ですが、Qtでは状態の変化を「シグナル」というそうです。

シグナルは関数(Qtでは「スロット」)に結びつけて使用することで処理を実行できるようになります。
次のサンプルは、ボタンをクリックすると終了するというものです。

import sys

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QPushButton

if __name__ == '__main__':
    app = QApplication(sys.argv)

    button = QPushButton('Quit')
    button.clicked.connect(quit)
    button.show()

    sys.exit(app.exec_())


9行目、ボタンウィジェットQPushButtonをインスタンス化します。
引数でボタンのキャプションを'Quit'に指定します。
QPushButtonはクリックするとclicked()というシグナルを発行します。
PyQtでは、シグナルのconnectメソッドにスロット関数を指定することで、シグナルとスロットを接続することができるわけです。

10行目でclickedシグナルにQApplicationのquitスロットを指定して、クリック時にアプリを終了するようにしています。

PyQtのシグナルはPyQtSignalクラスで管理されているようですが、ウィジェットにはclickedみたいにPyQtSignalをインスタンス化したプロパティがたくさん定義してあるという感じなのかな…
(ソースがないのでイマイチ不明ですが…)

実行すると、こんな感じです。


Quitボタンをクリックすると、終了します。
それだけです…