网站首页 > 编程文章 正文
什么是信号和槽
信号(Signal)和槽(Slot)是Qt中的核心机制,也是在PyQt编程中对象之间进行通信的机制。在QT中,每个继承自QObject的对象都可以使用信号和槽机制来进行通信。 信号和槽函数通过object.signal.connect()方法来连接。当一个QObject对象发射信号,与之相连接的槽函数将会自动执行。
假设我们将每个继承自QObject的对象想象成现实系统中可以完成一种或多种功能的部件,信号相当于发射,槽相当于接收。当某个部件完成某个功能后,可以发送一个信号,表示我已经完成了某项工作(同时可以传递一些结果数据, 非必须),这时候,那些和该信号连接的部件,相当于接收到该信号,对应的槽函数完成相应的工作。
信号和槽机制是类型安全的(type-safe):一个信号的参数必须和接收槽的参数匹配,(槽的参数可以比它接收的信号的参数短)。信号与槽是松耦合(loosely coupled)的:一个发出信号的类既不知道也不关心哪一个槽接收到这个信号。Qt的信号和槽机制保证了如果你将一个信号连接到一个槽上,槽会在正确的时间以信号的参数被调用。信号与槽可以携带任意个、任意类型的参数。
PyQt的对象都包含各自的内置信号,也可以添加自定义信号,信号与槽的特点大致如下:
- 一个信号可以连接多个槽;
- 一个信号可以连接另一个信号;
- 信号参数可以是Python基本数据类型,也可以扩展新的数据类型;
- 多个信号可以连接在一个槽上,即一个槽可以监听多个信号;
- 信号与槽的连接方式可以是同步连接,也可以是异步连接;
- 信号与槽可能会在不同的线程间连接,这时信号连接只能是异步方式;
- 信号不是必须有槽和其连接,即信号可以不处理;
- 信号个槽的连接可以被断开。
信号和槽的使用方法演示
在PyQt中,当object发出信号时,使用信号(signal)直接连接槽函数(slot_function), 连接方式如下:
object.signal.connect(slot_function);
下面的代码使用一个按钮,演示了信号和槽的连接方式:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox
class testWindow(QMainWindow):
def __init__(self, parent=None):
super(testWindow, self).__init__(parent)
button = QPushButton("按钮", self)
button.move(100, 100)
button.clicked.connect(self.buttonClicked)
self.setGeometry(100, 100, 320, 240)
self.setWindowTitle("Test Signal Slot connect")
def buttonClicked(self):
QMessageBox.information(self, "提示信息", "信号和槽测试:点击了按钮")
if __name__ == '__main__':
app = QApplication(sys.argv)
wnd = testWindow()
wnd.show()
sys.exit(app.exec())
运行上述代码,结果如下图所示
本文知识点
- 什么是信号和槽;
- 信号和槽的连接方式;
- 使用QWidget对象QPushButton。
喜欢本文内容的就收藏,点赞,评论,关注和转发。
- 上一篇: Qt开发经验小技巧181-185(qt软件开发)
- 下一篇: 第6篇 基础(六)实现Qt文本编辑功能
猜你喜欢
- 2024-09-11 Qt开发-文本编辑器中的数据存取(qt文本编辑器代码)
- 2024-09-11 Qt数据库应用15-通用数据库同步(qt的数据库操作)
- 2024-09-11 开源|一个基于QT设计串口调试工具
- 2024-09-11 第23天 | 28天学会PyQt5,多行文本框
- 2024-09-11 PyQt: QAbstractButton开关按钮与互斥的用法
- 2024-09-11 第6篇 基础(六)实现Qt文本编辑功能
- 2024-09-11 Qt开发经验小技巧181-185(qt软件开发)
- 2024-09-11 Qt开发经验总结之武林秘籍(qt开发程序)
- 2024-09-11 Qt状态机框架介绍(二)(状态机编程实例及适用范围)
- 2024-09-11 Qt编写安防视频监控系统9-自动隐藏光标
你 发表评论:
欢迎- 05-142014年最流行前端开发框架对比评测
- 05-14七爪源码:如何使用 Next.js 构建 Shopify 店面
- 05-14Web 前端怎样入门?
- 05-14我为什么不建议你使用框架
- 05-14推荐几个好用的React UI 框架
- 05-14PDFsharp:强大的 .NET 跨平台 PDF 处理库
- 05-14一组开源免费的Web动画图标,荐给需要的设计师和程序员
- 05-14salesforce 零基础学习(二十九)Record Types简单介绍
- 最近发表
- 标签列表
-
- spire.doc (59)
- system.data.oracleclient (61)
- 按键小精灵源码提取 (66)
- pyqt5designer教程 (65)
- 联想刷bios工具 (66)
- c#源码 (64)
- graphics.h头文件 (62)
- mysqldump下载 (66)
- sqljdbc4.jar下载 (56)
- libmp3lame (60)
- maven3.3.9 (63)
- 二调符号库 (57)
- 苹果ios字体下载 (56)
- git.exe下载 (68)
- diskgenius_winpe (72)
- pythoncrc16 (57)
- solidworks宏文件下载 (59)
- qt帮助文档中文版 (73)
- satacontroller (66)
- hgcad (64)
- bootimg.exe (69)
- android-gif-drawable (62)
- axure9元件库免费下载 (57)
- libmysqlclient.so.18 (58)
- springbootdemo (64)
本文暂时没有评论,来添加一个吧(●'◡'●)