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

串口助手

  • 前言
  • 一、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 uic


if __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 uic

class 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 uic


if __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.mfbz.cn/a/778539.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

进程的控制-孤儿进程和僵尸进程

孤儿进程 : 一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被 init 进程( 进程号为 1) 所收养,并由 init 进程对它们完成状态收集工作 为了释放子进程的占用的系统资源: …

VS code修改底部的行号的状态栏颜色

VSCode截图 相信很多小伙伴被底部的蓝色状态栏困扰很久了 处理的方式有两种: 1、隐藏状态栏 2、修改其背景颜色 第一种方法大伙都会,今天就使用第二种方法。 1、点击齿轮进入setting 2、我现在用的新版本,设置不是以前那种json格式展示&…

ubuntu系统盘扩容

目录 1 介绍 2 步骤 2.1 关闭虚拟机 2.2 编辑虚拟机设置 2.3 设置扩展大小 2.4 打开虚拟机 2.5 找到磁盘管理 2.6 扩展 1 介绍 本部分主要记述怎么给ubuntu系统盘扩展存储容量,整个过程相对简单,扩容方式轻松、容易。 2 步骤 2.1 关闭虚拟机 2…

尚庭公寓——数据库设计

1. 数据的关系 一对一,一对多(多对一),多对多 2. 实体关系模型 实体关系模型常用ER图(enity relationship graph)表示; 矩形表示实体(类似Java中的对象,如学生就是一…

C++基础(八):类和对象 (下)

经过前面的学习,我们已经翻过了两座大山,类和对象入门知识就剩下这一讲了,加油吧,少年! 目录 一、再谈构造函数 1.1 构造函数体赋值 1.2 初始化列表(理解) 1.3 explicit关键字(C…

51单片机STC89C52RC——15.1 AD/DA(模数数模)

目的/效果 1 LCD1602 显示 可调电阻、光敏电阻、热敏电阻值(AD) 2 模拟信号控制LED明暗(DA) 一,STC单片机模块 二,AD/DA 2.1 AD/DA 介绍 AD(Analog to Digital):模拟…

anaconda中下载压缩包并用conda安装包

有时直接conda安装包时会出错;报错PackagesNotFoundError: The following packages are not available from current channels 比如 conda install -y bioconda::ucsc-gtftogenepred #直接安装报错 #直接下载压缩包安装https://blog.csdn.net/weixin_45552562/ar…

Apache Seata 高可用部署实践

本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 本文来自 Apache Seata官方文档,欢迎访问官网,查看更多深度文章。 Apache Seata 高可用部署实践 Seata 高可用部署实践 使用配置中心和数据库来实现 Seata 的高…

Linux|信号

Linux|信号 信号的概念信号处理的三种方式捕捉信号的System Call -- signal 1.产生信号的5种方式2.信号的保存2.1 core 标志位 2.信号的保存2.1 对pending 表 和 block 表操作2.2 阻塞SIGINT信号 并打印pending表例子 捕捉信号sigaction 函数验证当前正在处理某信号&#xff0c…

nginx配置尝试

from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import JSONResponse, FileResponse, HTMLResponse import logging import os from datetime import datetime import uvicorn# 初始化日志 logging.basicConfig(filenamefile_server.lo…

详解AT_dp_l Deque(区间动态规划)

题目 思路 考虑模拟博弈过程。 题目可以看成:先手希望X - Y最大,后手希望X - Y最小。 显然游戏过程中剩下的数必然是连续的一段。设 dp[i,j]​ 表示剩下下标为 [i,j] 的数时,先手(并非当前的先手而是开始时的先手,下同&#xf…

[数据结构] 基于交换的排序 冒泡排序快速排序

标题:[数据结构] 基于交换的排序 冒泡排序&&快速排序 水墨不写bug (图片来源于网络) 目录 (一)冒泡排序 优化后实现: (二)快速排序 I、实现方法: &#…

中英双语介绍百老汇著名歌剧:《猫》(Cats)和《剧院魅影》(The Phantom of the Opera)

中文版 百老汇著名歌剧 百老汇(Broadway)是世界著名的剧院区,位于美国纽约市曼哈顿。这里汇集了许多著名的音乐剧和歌剧,吸引了全球各地的观众。以下是两部百老汇的经典音乐剧:《猫》和《剧院魅影》的详细介绍。 1.…

C++友元函数和友元类的使用

1.友元介绍 在C++中,友元(friend)是一种机制,允许某个类或函数访问其他类的私有成员。通过友元,可以授予其他类或函数对该类的私有成员的访问权限。友元关系在一些特定的情况下很有用,例如在类之间共享数据或实现特定的功能。 友元可以分为两种类型:类友元和函数友元。…

推荐好玩的工具之OhMyPosh使用

解除禁止脚本 Set-ExecutionPolicy RemoteSigned 下载Oh My Posh winget install oh-my-posh 或者 Install-Module oh-my-posh -Scope AllUsers 下载Git提示 Install-Module posh-git -Scope CurrentUser 或者 Install-Module posh-git -Scope AllUser 下载命令提示 Install-Mo…

云端AI大模型群体智慧后台架构思考

1 大模型的调研 1.1 主流的大模型 openai-chatgpt 阿里巴巴-通义千问 一个专门响应人类指令的大模型。我是效率助手,也是点子生成机,我服务于人类,致力于让生活更美好。 百度-文心一言(千帆大模型) 文心一言"…

【Linux】进程创建和终止 | slab分配器

进程创建 fork 1.fork 之后发生了什么 将给子进程分配新的内存块和内核数据结构(形成了新的页表映射)将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表当中fork 返回,开始调度器调度 这样就可以回答之前返回两个值&#xff1f…

线程池理解及7个参数

定义理解 线程池其实是一种池化的技术实现,池化技术的核心思想就是实现资源的复用,避免资源的重复创建和销毁带来的性能开销。线程池可以管理一堆线程,让线程执行完任务之后不进行销毁,而是继续去处理其它线程已经提交的任务。 …

web缓存代理服务器

一、web缓存代理 web代理的工作机制 代理服务器是一个位于客户端和原始(资源)服务器之间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并指定目标原始服务器,然后代理服务器向原始…

【IT领域新生必看】 Java编程中的重载(Overloading):初学者轻松掌握的全方位指南

文章目录 引言什么是方法重载(Overloading)?方法重载的基本示例 方法重载的规则1. 参数列表必须不同示例: 2. 返回类型可以相同也可以不同示例: 3. 访问修饰符可以相同也可以不同示例: 4. 可以抛出不同的异…