- PyQt 教程
- PyQt - 首頁
- PyQt - 簡介
- PyQt - 環境搭建
- PyQt - Hello World
- PyQt - 主要類
- PyQt - 使用 Qt Designer
- PyQt - 元物件
- PyQt 訊號與槽
- PyQt - 訊號和槽
- PyQt - 支援和訊號
- PyQt - 未繫結和已繫結訊號
- PyQt - 使用 PyQtSignal 建立新的訊號
- PyQt - 連線、斷開和發射訊號
- PyQt - 槽裝飾器
- PyQt - 槽連線
- PyQt 佈局
- PyQt - 佈局管理
- PyQt - QBoxLayout
- PyQt - QGridLayout
- PyQt - QFormLayout
- PyQt - QHBoxLayout
- PyQt - QVBoxLayout
- PyQt - QStackedLayout
- PyQt - QGraphicsGridLayout
- PyQt - QGraphicsAnchorLayout
- PyQt - QGraphicsLayout
- PyQt - QGraphicsLinearLayout
- PyQt 基本控制元件
- PyQt - 基本控制元件
- PyQt - Qlabel 控制元件
- PyQt - QLineEdit 控制元件
- PyQt - QPushButton 控制元件
- PyQt - QRadioButton 控制元件
- PyQt - QCheckBox 控制元件
- PyQt - QComboBox 控制元件
- PyQt - QSpinBox 控制元件
- PyQt - QMessageBox
- PyQt - QDialogButtonBox 控制元件
- PyQt - QFontComboBox 控制元件
- PyQt - QDoubleSpinBox 控制元件
- PyQt - QToolBox 控制元件
- PyQt - QDialog 類
- PyQt - QMessageBox
- PyQt - 多文件介面
- PyQt - 拖放操作
- PyQt 繪圖 API
- PyQt - 繪圖 API
- PyQt 資料庫
- PyQt - 資料庫操作
- PyQt 核心知識
- PyQt - BrushStyle 常量
- PyQt - QClipboard
- PyQt - QPixmap 類
- PyQt 有用資源
- PyQt - 快速指南
- PyQt - 有用資源
- PyQt - 討論
PyQt - 訊號與槽
與以順序方式執行的控制檯模式應用程式不同,基於 GUI 的應用程式是事件驅動的。函式或方法會響應使用者的操作(例如單擊按鈕、從集合中選擇專案或滑鼠點選等,稱為事件)而執行。
用於構建 GUI 介面的控制元件充當此類事件的源。每個從 QObject 類派生的 PyQt 控制元件都設計為響應一個或多個事件發出“訊號”。訊號本身不會執行任何操作。相反,它會“連線”到一個“槽”。槽可以是任何可呼叫的 Python 函式。
在 PyQt 中,訊號和槽之間的連線可以透過不同的方式實現。以下是最常用的技術:
QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function)
當小部件發出訊號時,呼叫槽函式的更便捷方法如下:
widget.signal.connect(slot_function)
假設當單擊按鈕時要呼叫一個函式。此處,clicked 訊號需要連線到一個可呼叫函式。可以透過以下兩種技術中的任何一種來實現:
QtCore.QObject.connect(button, QtCore.SIGNAL(“clicked()”), slot_function)
或者
button.clicked.connect(slot_function)
示例
在以下示例中,兩個 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
廣告