
- PyQt5 教程
- PyQt5 - 首頁
- PyQt5 - 簡介
- PyQt5 - 最新動態
- PyQt5 - Hello World
- PyQt5 - 主要類
- PyQt5 - 使用 Qt Designer
- PyQt5 - 訊號與槽
- PyQt5 - 佈局管理
- PyQt5 - 基本控制元件
- PyQt5 - QDialog 類
- PyQt5 - QMessageBox
- PyQt5 - 多文件介面
- PyQt5 - 拖放
- PyQt5 - 資料庫處理
- PyQt5 - 繪圖 API
- PyQt5 - BrushStyle 常量
- PyQt5 - QClipboard
- PyQt5 - QPixmap 類
- PyQt5 有用資源
- PyQt5 - 快速指南
- PyQt5 - 有用資源
- PyQt5 - 討論
PyQt5 - 訊號與槽
與以順序方式執行的控制檯模式應用程式不同,基於 GUI 的應用程式是事件驅動的。函式或方法是響應使用者操作(例如單擊按鈕、從集合中選擇專案或滑鼠單擊等,稱為事件)而執行的。
用於構建 GUI 介面的控制元件充當此類事件的來源。每個從 QObject 類派生的 PyQt 控制元件都設計為響應一個或多個事件發出“訊號”。訊號本身不執行任何操作。相反,它連線到一個“槽”。槽可以是任何可呼叫的 Python 函式。
使用 Qt Designer 的訊號/槽編輯器
首先設計一個帶有 LineEdit 控制元件和 PushButton 的簡單表單。

如果按下按鈕,則需要清除文字框的內容。QLineEdit 控制元件為此目的具有 clear() 方法。因此,按鈕的clicked 訊號需要連線到文字框的clear() 方法。
首先,從“編輯”選單中選擇“編輯訊號/槽”(或按 F4)。然後用滑鼠突出顯示按鈕並將游標拖動到文字框。

釋放滑鼠後,將顯示一個對話方塊,其中顯示按鈕的訊號和槽的方法。選擇 clicked 訊號和 clear() 方法。

右下角的訊號/槽編輯器視窗將顯示結果:

儲存 ui 檔案並根據以下程式碼從 ui 檔案構建和生成 Python 程式碼:
pyuic5 -x signalslot.ui -o signalslot.py
生成的 Python 程式碼將透過以下語句建立訊號和槽之間的連線:
self.pushButton.clicked.connect(self.lineEdit.clear)
執行 signalslot.py 並在 LineEdit 中輸入一些文字。如果按下按鈕,文字將被清除。
構建訊號-槽連線
無需使用 Designer,您可以直接使用以下語法建立訊號-槽連線:
widget.signal.connect(slot_function)
假設在單擊按鈕時要呼叫一個函式。在這裡,clicked 訊號需要連線到一個可呼叫的函式。可以使用以下任何一種技術來實現:
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() 函式。
import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets 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) b2.clicked.connect(b2_clicked) win.setGeometry(100,100,200,100) win.setWindowTitle("PyQt5") 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