pyside6的信号与槽的简单测试

2024-05-10 20:20
文章标签 简单 测试 信号 pyside6

本文主要是介绍pyside6的信号与槽的简单测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

from PySide6.QtCore import QObject, Signal, QCoreApplication
import sysdef handle_signal(arg1, arg2):print("Received objects:", arg1, arg2)class UI(QObject):  # 创建QObject,用来承载和定义信号signal1 = Signal(object, object)  # 定义信号,为了提高灵活性,并没有定义信号的具体数据类型,而是定义为了objectdef __init__(self):super().__init__()self.signal1.emit('a', 100.0)    # 发射信号if __name__ == "__main__":app = QCoreApplication(sys.argv)ui = UI()ui.signal1.connect(handle_signal)    # 信号的连接sys.exit(app.exec())

运行结果,并没有正确执行。尽管这个信号被发射了,但在此时还没有槽连接到这个信号,因此没有任何效果。

修改,将槽的连接定义移至发射前面:原则上,先定义槽连接,再发射信号。

from PySide6.QtCore import QObject, Signal, QCoreApplication
import sysdef handle_signal(arg1, arg2):print("Received objects:", arg1, arg2)class UI(QObject):  # 创建QObject,用来承载和定义信号signal1 = Signal(object, object)  # 定义信号,为了提高灵活性,并没有定义信号的具体数据类型,而是定义为了objectdef __init__(self):super().__init__()if __name__ == "__main__":app = QCoreApplication(sys.argv)ui = UI()ui.signal1.connect(handle_signal)    # 信号的连接ui.signal1.emit('a', 100.0)  # 发射信号sys.exit(app.exec())# 运行结果:Received objects: a 100.0

 进一步的,发射和接收参数的数量:

信号定义了2个参数,只发射了1个,出错。

from PySide6.QtCore import QObject, Signal, QCoreApplication
import sysdef handle_signal(arg1, arg2):print("Received objects:", arg1, arg2)class UI(QObject):  # 创建QObject,用来承载和定义信号signal1 = Signal(object, object)  # 定义信号,为了提高灵活性,并没有定义信号的具体数据类型,而是定义为了objectdef __init__(self):super().__init__()if __name__ == "__main__":app = QCoreApplication(sys.argv)ui = UI()ui.signal1.connect(handle_signal)    # 信号的连接ui.signal1.emit('a')  # 发射信号sys.exit(app.exec())
# 出错信息:
TypeError: signal1(PyObject,PyObject) needs 2 argument(s), 1 given!

信号定义了3个参数,发射了3个,只接收2个,可以的。

from PySide6.QtCore import QObject, Signal, QCoreApplication
import sysdef handle_signal(arg1, arg2):print("Received objects:", arg1, arg2)class UI(QObject):  # 创建QObject,用来承载和定义信号signal1 = Signal(object, object, object)  # 定义信号,为了提高灵活性,并没有定义信号的具体数据类型,而是定义为了objectdef __init__(self):super().__init__()if __name__ == "__main__":app = QCoreApplication(sys.argv)ui = UI()ui.signal1.connect(handle_signal)    # 信号的连接ui.signal1.emit('a', 100.0, 123)  # 发射信号sys.exit(app.exec())# 运行结果:Received objects: a 100.0

总结:发射的参数必须按照信号的定义数量,槽函数接收的参数数量可以比定义的数量少。

可能的应用场景:PLC通信,上位机接收到PLC发送的数据包之后,第一个数据单元可能规定了数据的参数,第二个数据单元可能是数据的具体内容。

demo:

 

from PySide6.QtCore import QObject, Signal, QCoreApplication
import sysdef analysis_signal(arg1, arg2):   # 解析PLC数据print("Received datas:", arg1, "\nLength of datas:", arg2)def datas_signal(*args):     #  拆包数据print("Datas is:", *args[2:])class UI(QObject):  # 创建QObject,用来承载和定义信号signal1 = Signal(object, object, object)  # 定义信号,为了提高灵活性,并没有定义信号的具体数据类型,而是定义为了objectdef __init__(self):super().__init__()if __name__ == "__main__":app = QCoreApplication(sys.argv)ui = UI()ui.signal1.connect(analysis_signal)    # 信号的连接ui.signal1.connect(datas_signal)datas = ('a1', 5, (0xfe, 100, 200, 200.0, 123))  # 数据包demo,a1的含义:来自PLC1的数据;5:数据长度;(0xfe, 100, 200, 200.0, 123):数据包具体内容。ui.signal1.emit(*datas)  # 发射信号sys.exit(app.exec())# 运行结果:
Received datas: a1 
Length of datas: 5
Datas is: (254, 100, 200, 200.0, 123)

这篇关于pyside6的信号与槽的简单测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/977461

相关文章

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

全屋WiFi 7无死角! 华硕 RP-BE58无线信号放大器体验测评

《全屋WiFi7无死角!华硕RP-BE58无线信号放大器体验测评》家里网络总是有很多死角没有网,我决定入手一台支持Mesh组网的WiFi7路由系统以彻底解决网络覆盖问题,最终选择了一款功能非常... 自2023年WiFi 7技术标准(IEEE 802.11be)正式落地以来,这项第七代无线网络技术就以超高速

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

python多线程并发测试过程

《python多线程并发测试过程》:本文主要介绍python多线程并发测试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、并发与并行?二、同步与异步的概念?三、线程与进程的区别?需求1:多线程执行不同任务需求2:多线程执行相同任务总结一、并发与并行?1、

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

PyQt6/PySide6中QTableView类的实现

《PyQt6/PySide6中QTableView类的实现》本文主要介绍了PyQt6/PySide6中QTableView类的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录1. 基本概念2. 创建 QTableView 实例3. QTableView 的常用属性和方法

PyQt6/PySide6中QTreeView类的实现

《PyQt6/PySide6中QTreeView类的实现》QTreeView是PyQt6或PySide6库中用于显示分层数据的控件,本文主要介绍了PyQt6/PySide6中QTreeView类的实现... 目录1. 基本概念2. 创建 QTreeView 实例3. QTreeView 的常用属性和方法属性

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经