yu00’s blog

プログラミングに関する備忘録です

シグナルとスロット

PyQt5入門 PythonでGUI作成 - yu00’s blog

シグナルとスロットとは

シグナルとスロットの例として,
ボタンを押したときに何か処理をするプログラムを考えます.
そのときの流れは次のようになります.

  1. ボタンを押す
  2. ボタンが押されたというイベントが発行される
  3. そのイベントに紐づけされた処理が実行される

この流れの2がシグナル,3がスロットになります.

このように,シグナルは何かが起こったときに発行されるイベント,
スロットはシグナルが起こったとき実行される処理です.

シグナルとスロットの特徴

シグナルとスロットには次のような特徴があります.

ウィジェットにはシグナルが設定されている

ウィジェットにはもともといくつかのシグナルが設定されています.
例えばボタンウィジェットにはボタンが押されたときに発行される
シグナルが設定されています.

シグナルとスロットは自分で作ることもできる

シグナル,スロットはもともとあるものを利用することもできますが,
自分で作ることもできます.

シグナルとスロットの例

シグナルとスロットの例としてボタンが押されたときに
アプリを終了するプログラムを書いてみます.

#! /usr/bin/python3
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import (QApplication, QWidget, QPushButton) 

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QWidget()
    button = QPushButton('button', window)
    
    # スロットを設定
    button.clicked.connect(app.quit)
    
    window.show()
    sys.exit(app.exec_())

ボタンが押されたときQPushButton.clicked()というシグナル関数が呼ばれます.
QApplication.quit()はアプリを終了する関数です.
上のプログラムのようにconnect関数を実行するすることで,
clickedシグナルのスロットにquitが設定されます.
そして,ボタンが押されたときclicked()が呼ばれ,quit()が呼ばれることで
アプリが終了します.