PyQt-シグナルとスロット
順次実行されるコンソールモードアプリケーションとは異なり、GUIベースのアプリケーションはイベント駆動型です。関数またはメソッドは、ボタンのクリック、コレクションからのアイテムの選択、マウスのクリックなどのユーザーのアクションに応答して実行されます。events。
GUIインターフェースの構築に使用されるウィジェットは、そのようなイベントのソースとして機能します。QObjectクラスから派生した各PyQtウィジェットは、 'を発行するように設計されています。signal'1つ以上のイベントに応答します。信号自体は何のアクションも実行しません。代わりに、「に接続されている」slot'。スロットはどのようなものでもかまいませんcallable Python function。
PyQtでは、信号とスロット間の接続はさまざまな方法で実現できます。以下は最も一般的に使用される手法です-
QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)
ウィジェットによってシグナルが発行されたときにslot_functionを呼び出すためのより便利な方法は、次のとおりです。
widget.signal.connect(slot_function)
ボタンがクリックされたときに関数が呼び出されると仮定します。ここで、クリックされたシグナルは呼び出し可能な関数に接続されます。これは、次の2つの手法のいずれかで実現できます。
QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function)
または
button.clicked.connect(slot_function)
例
次の例では、2つのQPushButtonオブジェクト(b1とb2)がQDialogウィンドウに追加されています。b1とb2をクリックすると、それぞれ関数b1_clicked()とb2_clicked()を呼び出します。
b1がクリックされると、clicked()シグナルがb1_clicked()関数に接続されます。
b1.clicked.connect(b1_clicked())
b2がクリックされると、clicked()シグナルがb2_clicked()関数に接続されます。
QObject.connect(b2, SIGNAL("clicked()"), b2_clicked)
例
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
def window():
app = QApplication(sys.argv)
win = QDialog()
b1 = QPushButton(win)
b1.setText("Button1")
b1.move(50,20)
b1.clicked.connect(b1_clicked)
b2 = QPushButton(win)
b2.setText("Button2")
b2.move(50,50)
QObject.connect(b2,SIGNAL("clicked()"),b2_clicked)
win.setGeometry(100,100,200,100)
win.setWindowTitle("PyQt")
win.show()
sys.exit(app.exec_())
def b1_clicked():
print "Button 1 clicked"
def b2_clicked():
print "Button 2 clicked"
if __name__ == '__main__':
window()
上記のコードは次の出力を生成します-
出力
Button 1 clicked
Button 2 clicked