- 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 - 連線、斷開和發射訊號
將訊號連線到槽
在 PyQt 中,使用繫結訊號的 **connect()** 函式將訊號連線到槽。當訊號成功連線到槽時,connect() 方法返回一個 **Connection** 物件。它也可以稍後斷開連線。如果連線建立失敗,將引發異常。
連線訊號的語法和引數
連線訊號傳遞的語法和引數如下所示:
connect(slot[, type=PyQt5.QtCore.Qt.AutoConnection[, no_receiver_check=False]]) → PyQt5.QtCore.QMetaObject.Connection
傳遞的引數具有不同的用途,如下所示:
- **slot** - 它指定要連線訊號的槽。它可以是 Python 可呼叫物件或另一個繫結訊號。
- **type** - 要建立的連線的型別。預設情況下,它設定為 AutoConnection,這意味著 PyQt 將確定最合適的連線型別。
- **no_receiver_check** - 這是一個可選引數,用於抑制對底層 C++ 接收器例項是否仍然存在的檢查,並無論如何傳遞訊號。
連線訊號的示例
在此示例中,定義了一個名為 **Foo** 的類,該類具有一個訊號 **trigger**。然後使用方法 **connect_and_emit_trigger()** 將觸發訊號連線到槽 **handle_trigger**。
from PyQt6.QtCore import QObject, pyqtSignal
class Foo(QObject):
trigger = pyqtSignal()
def connect_and_emit_trigger(self):
self.trigger.connect(self.handle_trigger)
self.trigger.emit()
def handle_trigger(self):
print("Trigger signal received")
foo = Foo()
foo.connect_and_emit_trigger()
輸出
Trigger signal received
從槽斷開訊號
可以使用繫結訊號的 **disconnect()** 方法從槽斷開訊號。如果槽未連線到訊號或訊號根本沒有連線,則會引發異常。
斷開訊號的語法和引數
disconnect([slot])
這裡,**slot** 是一個可選引數,它指定要斷開的槽。如果未傳遞,則斷開連線到訊號的所有槽。
斷開訊號的示例
在此示例中,我們定義了一個名為 Bar 的類,該類具有一個訊號 trigger 和一個方法 connect_and_disconnect_trigger(),用於將訊號連線到槽 handle_trigger()。當呼叫 connect_and_disconnect_trigger() 時,它將 trigger 訊號連線到 **handle_trigger()** 槽,發出訊號,列印 **“Trigger signal received”**,然後斷開槽的連線。
from PyQt6.QtCore import QObject, pyqtSignal
class Bar(QObject):
trigger = pyqtSignal()
def connect_and_disconnect_trigger(self):
self.trigger.connect(self.handle_trigger)
self.trigger.emit()
self.trigger.disconnect(self.handle_trigger)
def handle_trigger(self):
print("Trigger signal received")
bar = Bar()
bar.connect_and_disconnect_trigger()
輸出
Trigger signal received
發射訊號
使用繫結訊號的 **emit()** 方法發射訊號。
發射訊號的語法和引數
emit(*args)
這裡,**args** 是一個可選引數序列,用於傳遞給任何連線的槽。
發射訊號的示例
在此示例中,定義了一個名為 **Baz** 的類,該類包含一個訊號 **trigger**。然後我們將 **trigger** 訊號連線到槽 **handle_trigger()** 並以值 **42** 發出訊號。當連線的槽接收到此值時,它會列印 **Trigger signal received with value: 42** 作為輸出。
from PyQt5.QtCore import QObject, pyqtSignal
class Baz(QObject):
trigger = pyqtSignal(int)
def emit_trigger(self):
self.trigger.emit(42)
def handle_trigger(self, value):
print("Trigger signal received with value:", value)
baz = Baz()
baz.trigger.connect(baz.handle_trigger)
baz.emit_trigger()
輸出
Trigger signal received with value: 42