- 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 中,**未绑定信号**是类级别的属性,定义了信号的特性,而**绑定信号**则与特定实例相关联,可以连接到槽并发射以触发 GUI 中的动作。在本章中,我们将了解 PyQt 中未绑定信号和绑定信号的概念。
未绑定信号
在 PyQt 中,未绑定信号基本上是类属性。当我们在类中定义信号时,它最初是未绑定的。这意味着信号与类的任何特定实例都不相关联。它作为稍后创建绑定信号的蓝图。
示例:未绑定信号
在此示例中,my_signal 最初是一个未绑定信号,因为它最初是类属性,直到创建类对象。然后我们创建一个 MyObject 的实例,并将 lambda 函数连接到信号。当信号以值 42 发射时,连接的 lambda 函数将被执行,并将“Received value: 42”打印到控制台。
from PyQt5.QtCore import QObject, pyqtSignal class MyObject(QObject): # Define an unbound signal my_signal = pyqtSignal(int) obj = MyObject() # Create an instance of MyObject obj.my_signal.connect(lambda value: print(f"Received value: {value}")) # Emit the signal obj.my_signal.emit(42)
输出
Received value: 42
绑定信号
在 PyQt 中,绑定信号与类的特定实例相关联。当我们将未绑定信号作为实例的属性引用时,PyQt 会自动将实例绑定到信号。此绑定过程类似于 Python 如何从类函数创建绑定方法。
绑定信号中的方法
绑定信号使用一些函数来促进其使用 -
- **connect()** - 此方法用于将槽连接到信号。槽是响应信号发射而调用的函数或方法。
- **disconnect()** - 此函数用于断开先前连接的槽与信号的连接。
- **emit()** - 此方法发射信号,触发任何连接的槽执行。
绑定信号具有 signal 属性,该属性表示信号的签名。
示例:断开槽连接
在此示例中,我们首先将槽连接到信号,发射信号,然后断开槽连接。当信号再次发射时,先前连接的槽将不再被调用。
class MyObject(QObject): # Define a signal my_signal = pyqtSignal(int) obj = MyObject() # Create an instance of MyObject slot = lambda value: print(f"Received value: {value}") obj.my_signal.connect(slot) # Emit the signal obj.my_signal.emit(42) # Disconnect the slot obj.my_signal.disconnect(slot) # Emit the signal again obj.my_signal.emit(100)
输出
Received value: 42
重载信号
在 PyQt 中,当信号支持多个签名时,则称该信号为重载信号。每个签名对应于一组特定的参数类型。要选择重载信号的特定签名,我们可以使用所需的签名索引信号。
签名是一系列类型,其中每个类型可以是 Python 类型对象或表示 C++ 类型的字符串。PyQt 自动规范化 C++ 类型名称,以确保一致性和易用性。
示例:重载信号
在此示例中,my_signal 被重载以支持整数和字符串参数。我们连接不同的槽来处理每种类型的参数,并使用相应的值发射信号。
class MyObject(QObject): # Define an overloaded signal my_signal = pyqtSignal([int], [str]) obj = MyObject() # Create an instance of MyObject obj.my_signal[int].connect(lambda value: print(f"Received integer value: {value}")) obj.my_signal[str].connect(lambda value: print(f"Received string value: {value}")) # Emit the signal with different types of arguments obj.my_signal[int].emit(42) obj.my_signal[str].emit("Hello PyQt")
输出
Received integer value: 42 Received string value: Hello PyQt
广告