【pyqt-实训训练】串口助手

news/2024/10/5 8:38:01/

串口助手

  • 前言
  • 一、ui设计
  • 二、ui的控件命名
  • 三、ui转py
    • 使用类的方法
    • 【扩展】使用ui文件导入!
    • P7的小错误
    • 解决办法
  • 总结


前言

我的惯例就是万物之始,拜见吾师🥰⇨pyqt串口合集
最开始的时候我想的是,学了那么久的pyqt,我一定可以写一个小项目了。然后自己去网上看了,大家基本上都是写的串口助手。
于是就想着开始了,但是,发现自己还是学术不精,看得迷迷糊糊的,最后一夜失眠去b站逛逛,偶然看见这个老师教的好像不错,很详细。简直太适合我这个废物了。
废话不说太多,干就完了。
但还是要开一篇笔记记录一下,学习过程中的收获。避免日后我这个头脑简单的货忘记了。

----2024.7.2
找到一个很棒的虚拟串口的软件,超级好用。仙人指路👉VSPD虚拟串口软件安装及使用
可以模拟两个串口之间的通讯,这里是使用他创建虚拟串口进行调试自己的设计的上位机是否能成功使用数据收发功能的。

----2024.7.6


一、ui设计

老师采用的是design界面设计。
简单来说就是抄界面。
我的参考是江科大的串口助手,与老师的略微不同,但是我认为大同小异而已。
参考界面如下:
在这里插入图片描述

  • 1、PyQt creator 控件的复制
    这里需要注意的点就是对于一模一样的组合控件,可以按住一个之后,按ctrl选中第二个然后拖出来。实现一组控件的复制。
    在这里插入图片描述
    以下是一些我认为值得注意的点
    在这里插入图片描述
  • 2、获取界面大小

在这里插入图片描述
简答说就是利用截图工具获取像素大小。
我这里主要是套娃截图不太方便了。这里是795535
我选择的话就选择是780
540吧
在这里插入图片描述

然后老师选择对小的进行布局,然后在对整体进行布局。

  • line edit 只显示一行的
    而textbower是大量文本显示的。

在这里插入图片描述

弹簧就是为了占位置,防止控件尺寸变异
在这里插入图片描述
改变弹簧的长度改变整体布局
在这里插入图片描述

我就说我误打误撞听半句不听半句的性格很容易出错。
于是遇到了请添加图片描述
解决办法
哈哈,我其实没看懂这些博主想表达的意思,但是我猜想,肯定是布局大小冲突或者其他布局方面的错误了。
然后就是疯狂的截图改大小截图改大小,保存,保存失败,继续修改的过程。最终解决。
当然我还调整了整体的布局关系。误打误撞的解决了。
最有成就感的合影~
在这里插入图片描述

二、ui的控件命名

在这里插入图片描述
这个步骤就是把对应的名称都给改了,方便后续写代码。
大工程呀,一手翻译软件一手复制粘贴才能写完的🤗

三、ui转py

导入窗口展示。
这个步骤就跟老师的vscode操作不一样了,参考我以前的笔记吧。
【PyQt】06-.ui文件转.py文件
根据前面的设定,此时只需如此就行啦
在这里插入图片描述
{这里导入花了很长一段时间,最后打算废掉换另一种方法}
就是,不知道哪里有错。转成py文件一直在报错。。。。
秉承着那里报错就修改哪里的态度,注释掉两个奇怪的地方之后
在这里插入图片描述
成功召唤出来
在这里插入图片描述
这里记录一下,main的部分

'''
#Author :susocool
#Creattime:2024/6/29
#FileName:main
#Description: 串口助手的主要界面
'''
import sys
from PyQt5.QtWidgets import QApplication
import PyQt5.QtWidgets as qw
import SerialAssistant_ui
# from PyQt5 import uicif __name__ == "__main__" :app = qw.QApplication(sys.argv)w = qw.QWidget()ui = SerialAssistant_ui.Ui_Serial()ui.setupUi(w)# ui = uic.loadUi(".\SerialAssistant_ui.ui")w.show()app.exec_()

使用类的方法

一个很诡异的事情,就是我上面的办法的时候不是遇到了两个奇怪的报错嘛,但是跟着老师用下面的方法写之后。遇到了两个奇怪的现象,于是我把注释取消掉就好 了!
灵异事件展示
在这里插入图片描述
取消注释,显示正常。
在这里插入图片描述
算了,人要灵活变通吧

'''
#Author :susocool
#Creattime:2024/6/29
#FileName:main
#Description: 串口助手的主要界面
'''
import sys
from PyQt5.QtWidgets import QApplication
import PyQt5.QtWidgets as qw
import SerialAssistant_ui
import threading
# from PyQt5 import uicclass SerialFrom(qw.QMainWindow):def __init__(self):super().__init__()self.ui = SerialAssistant_ui.Ui_Serial()self.ui.setupUi(self)print("主线程ID",threading.current_thread().ident)if __name__ == "__main__" :app = qw.QApplication(sys.argv)w = SerialFrom()w.show()app.exec_()

【扩展】使用ui文件导入!

本来是想ui导入更加方便的,但是毕竟我是初学者,要跟着老师的步骤操作。于是我放弃这条路了,但是还是要记录一下的。

'''
#Author :susocool
#Creattime:2024/6/29
#FileName:main
#Description: 串口助手的主要界面
'''
import sys
from PyQt5.QtWidgets import QApplication
from PyQt5 import uicif __name__ == "__main__" :app = QApplication(sys.argv)ui = uic.loadUi(".\SerialAssistant_ui.ui")ui.show()app.exec_()

在这里插入图片描述
最终的结果是这样的。

P7的小错误

我在学习老师的教学视频的时候遇到了一个小错误搞了半天。都没找出那里有问题。
当然最终解决了,本质上导致这种问题的根本原因就是我自己的不熟练导致。
首先,P7 讲的是数据通信了。{这里采用虚拟串口的方式进行通讯}
描述一下问题吧
就是我发现我的数据
这个是打印接收到所有参数的语句。刚开始我并没有注释掉这块,于是导致后面的在receive_textBrowser打印参数始终不出来。
在这里插入图片描述
我是把信号触发的槽函数设置成slot_ReadData。在这个函数的开始我就把接收到的参数都打印出来,可以看见打印出来的全是[]空值
在这里插入图片描述

解决办法

排查了很久才发现,导致这个的原因就是前面的那句打印所有参数。虽然不知道为什么会导致数据被截胡,但是咱秉承能跑就行的原则选择彼此放过
【正常显示】
在这里插入图片描述
刚刚去查了一下ai
ai给出的解释是

在串口通信中,readAll() 方法会读取并返回当前可用的所有数据,但是一旦读取过,数据就会被清空,下次调用就可能返回空数据。

其实我认为,也非常有道理。


总结

这篇文章依旧没有总结


http://www.ppmy.cn/news/1473574.html

相关文章

Ratf协议图解、Nacos CP集群源码分析

文章目录 Nacos CP集群说明Raft协议leader选举重新选举leader多个Candidate情况更新操作,日志复制网络分区 源码实现服务注册leader选举leader心跳包 Nacos CP集群 说明 CAP原则 C 一致性 ConsistencyA 可用性 Availability分区容错性 Partition tolerance 分区…

在postgres数据库中的几个简单用法

1、例如表中coord_str的字段数据是121.12334 31.3435这样的字符串,如何将对应的数据转换成geometry数据,实现如下 UPDATE coordinates SET geom ST_GeomFromText(POINT( || split_part(coord_str, , 1) || || split_part(coord_str, , 2) || ), 43…

C++笔试强训2

文章目录 一、选择题二、编程题 一、选择题 和笔试强训1的知识点考的一样,因为输出的是double类型所以后缀为f,m.n对其30个字符所以m是30,精度是4所以n是4,不加符号默认是右对齐,左对齐的话前面加-号,所以答案是-30.4f…

c_各个unsigned int 和 int的取值范围

bool, uint8_t, uint16_t, uint32_t, uint64_t, int8_t, int16_t, int32_t, int64_t 取值范围分别是什么? 定义形式: typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned int uint32_t; typedef unsigned long uint64_…

java面试-SpringAOP

1.SpringAOP的使用 你了解Spring AOP 吗? 通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 2.SpringAOP的原理 我们可以将ASM生成的类进行缓存,这样能解决生成的类比较低效的问题。 ASM是可以操作字节码的框架。 真实实现类和…

状态机与时钟分频

目录 描述 输入描述: 输出描述: 参考代码 描述 题目描述: 使用状态机实现时钟分频,要求对时钟进行四分频,占空比为0.25 信号示意图: clk为时钟 rst为低电平复位 clk_out 信号输出 Ps 本题题解是按…

嵌入式面试需要注意的问题!

1.在嵌入式和IT行业,技术更新换代非常快。因此,求职者必须时刻关注行业的最新动向和发展趋势。了解当前市场上哪些技术和岗位需求量大,哪些新兴技术值得学习和掌握,都是至关重要的。 🔸嵌入式行业:嵌入式系…

力扣爆刷第159天之TOP100五连刷61-65(翻转单词、对称二叉树、遍历求和)

力扣爆刷第159天之TOP100五连刷61-65(翻转单词、对称二叉树、遍历求和) 文章目录 力扣爆刷第159天之TOP100五连刷61-65(翻转单词、对称二叉树、遍历求和)一、151. 反转字符串中的单词二、129. 求根节点到叶节点数字之和三、104. 二…