- 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