與一般按順序執行的控制檯模式的應用程序不同,基於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()