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确定界面的基本布局和控件功能
-
新建窗体,选择widget样式
-
根据功能从左侧控件栏里面拖入控件
我这里用了以下控件:
- 5个QPushButton
- 1个QTextBrowser(不可编辑文本,只能显示多行文本)
- 1个QPlainTextEdit(可编辑多行文本)
- 3个QLabel(用来显示实验室logo图片、连接状态、和文字)
-
改变控件的大小和位置,达到你满意为止
-
改变控件的基本样式(右边的属性编辑器能直接改的)
比如修改我的button1,这里主要该字体、颜色等基础属性 -
导入图片
有两种方法,一种直接导入,一种通过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.<