PyQt4--訊號和槽
阿新 • • 發佈:2018-12-11
與一般按順序執行的控制檯模式的應用程式不同,基於GUI的程式是由事件驅動的。事件events是響應使用者動作的函式或方法,比如點選按鈕、選擇專案、滑鼠點選等。用來構建GUI介面的掛件Widgets是這些事件的來源。每個PyQt Widget,都派生自QObject類,用來發射“訊號”signals來響應一個或多個事件。訊號本身不執行動作,它們連線到“槽”slot上。“槽”是可呼叫的Python函式。
在PyQt中,訊號和槽的連線有多種方式。
最常用的方式是:
QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)
更方便的方式是當widget發射signal時,呼叫slot函式:
widget.signal.connect(slot_function)
以下是兩種方式的舉例:
#!/usr/bin/python # -*- coding: utf-8 -*- 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()