【Python Qt】DIY串口调试上位机---记录第一个QT小项目

这篇博客分享了如何使用Python的Qt库制作串口调试上位机,包括界面设计、功能实现和打包成exe。功能包括显示可用串口、自适应窗口大小、实时接收与发送数据、状态显示等。开发过程中涉及Qt Designer、多线程和串口通信知识,最终代码已开源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.效果图

废话不多说,先上一个效果图:
在这里插入图片描述

2.功能介绍

  • 自适应窗口大小(你要学会QT designer的Layout布局)
  • 点击搜索串口,端口下拉框显示可用的端口
  • 波特率可以下拉选择,提供了三种常用的波特率,115200,38400,9600
  • 支持状态显示:连接成功/未找到串口
  • 接收区实时接收(需要用到python多线程),这里我写了自动换行功能
  • 发送区可以实时发送和清除
  • 点击清空缓存可以清空接收区的内容
  • 最后一点,也是我做这个上位机的主要原因,市面上的串口调试助手太丑了,白色背景而且很多功能繁杂且无用。有好看的小姐姐分析数据的时候心情大好,哈哈哈。

3.知识点

1.白月黑羽的Python Qt教程,我觉得写的清除明白,有python基础的人即可轻松入门。
白月黑羽的Python Qt教程
白月黑羽b站教程

2.Qt Designer的使用,控件样式css编写

3.python多线程的理解,子线程、信号量
python多线程详解(超详细)

4.基本的串口通信知识,python基础(必须要会class)

4.开发过程

4.1 在 Qt Designer确定界面的基本布局和控件功能

  1. 新建窗体,选择widget样式
    在这里插入图片描述

  2. 根据功能从左侧控件栏里面拖入控件
    我这里用了以下控件:

  • 5个QPushButton
  • 1个QTextBrowser(不可编辑文本,只能显示多行文本)
  • 1个QPlainTextEdit(可编辑多行文本)
  • 3个QLabel(用来显示实验室logo图片、连接状态、和文字)
  1. 改变控件的大小和位置,达到你满意为止

  2. 改变控件的基本样式(右边的属性编辑器能直接改的)
    在这里插入图片描述
    比如修改我的button1,这里主要该字体、颜色等基础属性

  3. 导入图片
    有两种方法,一种直接导入,一种通过qrc文件导入
    但是我们最后的程序是要打包的,所以必须采用第二种
    qrc写法如下,网上其实模板挺多的,中间写入与ui文件同一目录下的图片文件

<RCC>
  <qresource>
    <file>girl.jpg</file>
  </qresource>
  <qresource prefix="新前缀">
    <file>girl.jpg</file>
    <file>logo.jpg</file>
    <file>icon.jpg</file>
  </qresource>
</RCC>

接下来就是在designer里面导入
在这里插入图片描述

在这里插入图片描述
导入之后,这里需要注意的一点:scaledcontents一定要勾选,不然图片是实际大小

6.将qrc文件转化为py文件
因为之后需要在我们的主代码里面import。
这里面只需要命令行就可以了,不再详细赘述
可以参考这篇文章:PyQt5使用pyinstaller打包时图标资源无法打包的解决方法——使用pyrcc5将qrc文件转为py文件
注意要把转换后的py文件放入sitepackge目录下

7.进行layout布局

在这里插入图片描述
主要调节layoutstrench,来调节同一层下的控件比例。
有时候会发现调节这个没有用,那是因为原始大小的限定,比如一张图片的像素限定,这时候只要把原始大小调整一下就好了。

8.界面美化
在这里插入图片描述

至此,咱们的“前端”GUI功能以及完成了,效果图如下:
在这里插入图片描述

4.2 Pyside2编程

这里直接上代码:
注意这里是动态加载ui文件,必须放在和py文件同一目录下

from PySide2.QtWidgets import QApplication,QTextBrowser
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFile,Signal,QObject
from PySide2 import QtCore
from threading import Thread,Timer
from time import sleep
import serial
from serial.serialwin32 import Serial
from serial.tools import list_ports
from time import sleep
import datetime
import com

class MySignals(QObject):
    # 定义一种信号,两个参数 类型分别是: QTextBrowser 和 字符串
    # 调用 emit方法 发信号时,传入参数 必须是这里指定的 参数类型
    text_print = Signal(QTextBrowser,str)

    # 还可以定义其他种类的信号
    update_table = Signal(str)

global_ms = MySignals()
class start():
    def __init__(self):
        file = QFile("communication.ui")   #D:/python/venv/Qt/serial/ui/communication.ui
        print(FileExistsError)
        file.<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Greif_Hairline

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值