当前位置: 首页 > news >正文

PySide6/PyQt信号总线的实现、使用以及使用建议

PySide6/PyQt信号总线的实现、使用以及使用建议

有人说编程的逻辑来源于对现实的抽象,我觉得他是对的,就比如信号总线这个概念(可以理解为类似数据线那种线)。现实是里边有一条一条的小细线(这个就可以理解为一个信号),它们有的负责供电,有的负责传输数据。信号总线是这种数据线的抽象,里边是一堆信号,不过他们更多是用来传输状态。

必要的知识

在这里应该先了解一下 Qt的信号和槽函数以及常见的连接!

信号和槽

为了方便理解,这里把红路灯抽象为 这种机制:

  • 红灯亮:信号
  • 行人停下: 槽函数

信号与槽的各种连接

有如下几种连接:

  1. 信号与信号
  2. 信号与槽
  3. 一个信号连接多个槽
  4. 多个信号连接一个槽

这里建议看看官网的描述: 官网链接

信号总线实现

要点:

  1. 继承自QObject
  2. 有一个以上信号Signal(类属性)
  3. 实例化该总线类

代码如下:

from PySide6.QtCore import QObject,Signalclass SignalBus(QObject):""" 信号总线 """a_singal = Signal(str)b_singal = Signal(bool)# 创建全局信号总线实例(只实例化一次)
signal_bus = SignalBus()

怎么使用信号总线

一句话:

  • 需要发送的时候发送,需要接收的时候接收

注意:

  • 发送信号需要借助其他信号 也就是: 信号与信号连接

示例代码:
发送信号:

from you_signal_bus_path import siganl_bus##省略代码
self.your_btn.clicked.connect(lambda :siganl_bus.a_singal.emit("a"))
self.your_btn.toggled.connect(siganl_bus.b_singal.emit)
## 这里toggled 信号一定会传输布尔值 所以不需要匿名函数传参数

接收信号:

from you_signal_bus_path import siganl_bus##省略代码
siganl_bus.a_singal.connect(lambda signal_str: print(signal_str))
siganl_bus.b_singal.connect(lambda toggled: print(toggled))

使用建议

  1. 信号可复用
  2. 传输字符串的信号可复用性高
  3. 划分责任避免串线(过渡复用)
  4. 你无法在同一个部件类内 套壳该部件自定义信号

具体讲讲4,如下案例
某个按钮类的行为触发:A
自定义文本改变信号: B
文本改变信号:C
实际执行槽函数:D
A 一个类 F
B、C、D另一个类 E

# E
A.connect(B)
# F
C=B #或 C.connect(B.emit)
B.connect(D)

这是一个错误的示例 因为在F里信号和槽已经连接(形成闭环)了

写到最后

当你遇到问题的时候不要慌张,执行如下程序,也许可以解决:

  1. 判断是否有可复用的方法或函数 -> if has:调用 else 3
  2. 分析逻辑是否有问题 -> if has:重构 else 3
  3. 参考其他人的解决方案/提升认知(看看有没有忽略的文档)
http://www.dtcms.com/a/606862.html

相关文章:

  • 制作网站参考wordpress设置摘要还是显示全文
  • 2012年网站设计方法网站建设吉金手指排名15
  • 二十九、STM32的USART (串口发送)
  • dw做网站链接数据库渭南 网站建设
  • 站长工具查询网站信息1 建设网站目的是什么意思
  • 企业网站开发课程的能力应用图片直链在线生成网站
  • 设计模式学习(3)-行为型模式
  • Angular 2 架构:深度解析与最佳实践
  • 09-微服务原理篇(XXLJOB-幂等-MySQL)
  • 代码随想录训练营打卡Day45| 动态规划part12
  • 网站开发要考什么证wordpress xy 变装
  • 已知两个端点的位置、切矢量和曲率,构造一条五阶Bézier 曲线实现 G² 连续的方法
  • 显示 Markdown 的文件
  • 算法学习入门---模拟(C++)
  • 列表网做优化网站怎么样成都网站注册
  • 文库网站开发教程wordpress 绑定熊掌号
  • C语言在线编译器网站 | 提供快速、便捷的在线编程与调试平台
  • 免费高清视频素材网站品牌网站建设定制
  • 个人做的卖货网站团购网站开发
  • C++---const关键字 编译期约束保证数据的 只读性
  • 算法基础入门第一章
  • 家用除湿机方案开发,除湿机MCU控制方案设计
  • 搜狗推广做网站要钱吗wordpress首页调用指定文章
  • wordpress使用人数宁波seo在线优化公司
  • YOLO系列发展史与应用现状:从开山之作到实时目标检测的基石
  • 【电商微服务日志处理全方案】从MySQL瓶颈到大数据架构的实战转型
  • 蔬菜配送网站建设网络系统脆弱性的不安全因素
  • 常州想做个企业的网站找谁做注册公司需要交多少税
  • 反编译易语言程序 | 如何安全有效地进行易语言程序的反编译操作
  • 刺猬猫网站维护wordpress $post->id