基于PyCharm实现串口GUI编程
工具效果如下如所示

下面简单介绍一下操作流程
1.打开PyCharm软件

2.创建一个工程

3.给该工程命名

4.在main.py里面黏贴如下的代码
# This is a sample Python script.
# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
import serial
import threading
import timefrom tkinter import *
from tkinter.ttk import *
from tkinter import messageboxdef open_serial(a,b,c,d,e):global serprint("串口号:",a)print("波特率:",int(b))print("数据位:",c)print("停止位:",d)print("检验位:",e)bytesize = serial.EIGHTBITSif c == '7':bytesize = serial.SEVENBITSprint("select SEVENBITS")if c == '6':bytesize = serial.SIXBITSprint("select SIXBITS")if c == '5':bytesize = serial.FIVEBITSprint("select FIVEBITS")stopbitsize = serial.STOPBITS_ONEif d == '2':stopbitsize = serial.STOPBITS_TWOprint("select STOPBITS_TWO")paritysel = serial.PARITY_NONEif e == 'Odd':paritysel = serial.PARITY_ODDprint("select Odd")if e == 'Even':paritysel = serial.PARITY_EVENprint("select EVEN")ser=serial.Serial(port=a,baudrate=int(b),bytesize=bytesize,stopbits=stopbitsize,parity=paritysel,timeout=0.5)# ser = serial.Serial('COM4', 9600, timeout=1)def print_hi(name):# Use a breakpoint in the code line below to debug your script.print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.def print_log(log):time_start = time.time()date = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())print(f'{date}-{log}')def recv_hander():while 1:if ser.is_open:data = ser.read(1024).decode('gbk')print_log(data)msgshow.insert(END, data)def create_recv_thread():global thth = threading.Thread(target=recv_hander)th.setDaemon(True)th.start()def msg_send():msg = msginp.get()print_log(f'send==>{msg}')if ser.is_open:ser.write(msg.encode('gbk'))def open_com():print_log("open com")com_val = comnum.get()baud_val = baud.get() # 获取当前选定项目的值databit_val = databit.get()stopbit_var = stopbit.get()parity_var = parity.get()print(com_val)print(baud_val)open_serial(com_val, baud_val, databit_val, stopbit_var, parity_var)if ser.is_open:messagebox.showinfo("标题","串口打开成功")create_recv_thread()def close_com():print_log("close com")if ser.is_open:ser.close()# Press the green button in the gutter to run the script.
if __name__ == '__main__':print_hi('PyCharm')root = Tk()root.geometry('768x512')root.title('串口工具')comnumvar = StringVar()baudvar = StringVar()databitvar = StringVar()stopbitvar = StringVar()parityvar = StringVar()lb_com = Label(root, text='串口号')lb_com.place(relx=0.01, rely=0.05, relwidth=0.1, relheight=0.1)comnum = Combobox(root, textvariable=comnumvar, values=['COM1', 'COM2', 'COM3', 'COM4', ])comnum.place(relx=0.08, rely=0.075, relwidth=0.1)comnum.current(3)lb_baud = Label(root, text='波特率')lb_baud.place(relx=0.01, rely=0.12, relwidth=0.1, relheight=0.1) #add 0.045baud = Combobox(root, textvariable=baudvar, values=['115200', '38400', '9600', '4800', ])baud.place(relx=0.08, rely=0.145, relwidth=0.1) #add 0.025baud.current(2)lb_databit = Label(root, text='数据位')lb_databit.place(relx=0.01, rely=0.19, relwidth=0.1, relheight=0.1) #add 0.045databit = Combobox(root, textvariable=databitvar, values=['8', '7', '6', '5', ])databit.place(relx=0.08, rely=0.215, relwidth=0.1) #add 0.025databit.current(0)lb_stopbit = Label(root, text='停止位')lb_stopbit.place(relx=0.01, rely=0.26, relwidth=0.1, relheight=0.1)stopbit = Combobox(root, textvariable=stopbitvar, values=['1', '2', ])stopbit.place(relx=0.08, rely=0.285, relwidth=0.1)stopbit.current(0)lb_parity = Label(root, text='校验位')lb_parity.place(relx=0.01, rely=0.33, relwidth=0.1, relheight=0.1)parity = Combobox(root, textvariable=parityvar, values=['None','Odd','Even',])parity.place(relx=0.08, rely=0.355, relwidth=0.1)parity.current(0)btnopen = Button(root, text='打开串口', command=open_com)btnopen.place(relx=0.01, rely=0.45, relwidth=0.1, relheight=0.05)btnclose = Button(root, text='关闭串口', command=close_com)btnclose.place(relx=0.12, rely=0.45, relwidth=0.1, relheight=0.05)lb1 = Label(root, text='串口数据接收')lb1.place(relx=0.25, rely=0.05, relwidth=0.7, relheight=0.1)msgshow = Text(root)msgshow.place(relx=0.25, rely=0.15, relwidth=0.7, relheight=0.3)lb2 = Label(root, text='串口数据发送')lb2.place(relx=0.25, rely=0.45, relwidth=0.7, relheight=0.1)msginp = Entry(root)msginp.place(relx=0.25, rely=0.55, relwidth=0.7, relheight=0.1)btnsend = Button(root, text='发送', command=msg_send)btnsend.place(relx=0.35, rely=0.86, relwidth=0.3, relheight=0.1)root.mainloop()# See PyCharm help at https://www.jetbrains.com/help/pycharm/
5.执行脚本

6.如果有提示“No module named 'serial”,需要安装 pyserial,在终端命令行输入:pip install pyserial,如下图所示:

7.在windows下安装一对虚拟串口,可以下载vspd安装,最终结果如下所示:

8.使用第三方工具进行数据互发测试

9.将该工具打包成exe可执行文件
在命令行终端输入:python -m pysimplegui-exemaker.pysimplegui-exemaker

最后点击“Make EXE”,生成如下所示的exe文件

相关文章:
基于PyCharm实现串口GUI编程
工具效果如下如所示 下面简单介绍一下操作流程 1.打开PyCharm软件 2.创建一个工程 3.给该工程命名 4.在main.py里面黏贴如下的代码 # This is a sample Python script. # Press ShiftF10 to execute it or replace it with your code. # Press Double Shift to search everyw…...
【1.8计算机组成与体系结构】磁盘管理
目录 1.磁盘基本结构与存取过程1.1 磁盘基本结构1.2 磁盘的存取过程 2.磁盘优化分布存储3.磁盘单缓冲区与双缓冲区4.磁盘移臂调度算法 1.磁盘基本结构与存取过程 1.1 磁盘基本结构 磁盘:柱面,磁道,扇区。 1.2 磁盘的存取过程 存取时间寻…...
1663:【 例 1】取石子游戏 1
【题目描述】 有一种有趣的游戏,玩法如下: 玩家: 2 人; 道具: N 颗石子; 规则: 1、游戏双方轮流取石子; 2、每人每次取走若干颗石子(最少取 1 颗,最多取…...
Django去访问web api接口Object of type Session is not JSON serializable
解决方案:settings.py中加入 :SESSION_SERIALIZER django.contrib.sessions.serializers.PickleSerializer 事由:Django去访问一个web api接口,两次连接之间需要通过Session()保持身份验证。 def sendCode(request): mobile jso…...
每日一题,二维平面
给你 二维 平面上两个 由直线构成且边与坐标轴平行/垂直 的矩形,请你计算并返回两个矩形覆盖的总面积。 每个矩形由其 左下 顶点和 右上 顶点坐标表示: 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。 第二个矩形由其左下顶点 (bx1, …...
【jupyter notebook】jupyter notebook 调用另一个jupyter notebook 的函数
总结 使用 %run 魔法命令将 Notebook 转换为py文件使用 nbimporter 库手动复制代码优点notebook最前面加上即可最基本方法就跟导入py文件一样,不会被执行一遍快缺点所有的代码都会执行一遍修改原文件就要重新转换,且 从自定义的 .py 文件中导入函数时&a…...
Linux--学习记录(3)
G重要编译参数 -g(GDB调试) -g选项告诉gcc产生能被GNU调试器GDB使用的调试信息,以调试程序编译带调试信息的可执行文件g -g hello.c -o hello编译过程: -E(预处理) g -E hello.c -o hello.i-S(编…...
自然语言处理阅读第一弹
Transformer架构 encoder和decoder区别 Embeddings from Language Model (ELMO) 一种基于上下文的预训练模型,用于生成具有语境的词向量。原理讲解ELMO中的几个问题 Bidirectional Encoder Representations from Transformers (BERT) BERT就是原生transformer中的Encoder两…...
Spring Boot+Mybatis设置sql日志打印
在全局配置文件添加以下内容:logging.level.com.demo.mapperdebug,com.demo.mapper:src下的mapper路径,debug:设置日志打印级别为debug,亦可设置为:ERROR、WARN、INFO application.properties …...
步进电机电流设置的3种方法
本文介绍步进电机电流设置的3种方法。 步进电机电流设置包括运行电流(IRun)和保持电流(IHold)2种。电机运行时需要有较大电流以保证有足够的力矩使物体运动,而停止的时候,为了减少电机发热及降低功耗&…...
uniapp-使用返回的base64转换成图片
在实际开发的时候 需要后端实时的给我返回二维码 他给我返回的是加密后的base64字符串 我需要利用这个base64转换到canvas画布上展示 或者以图片的形式展示在页面内 在canvas画布上展示 使用官方的uni.getFileSystemManager().writeFile()方法可将base64码转成的二维码显示在…...
有机面条市场分析:到2026 年的复合年增长率为 5.4%
近年来,有机面条因其健康益处和可持续性而广受欢迎。由于消费者对健康和天然食品的需求不断增加,预计 全球有机面条市场将继续以显着速度增长。特别是中国市场,由于健康意识的提高以及对有机和天然产品的兴趣 增加,有机面条消费量…...
广州设计周落幕|值得被歌颂的奥力斯特岩板
12月11日,一年一度的广州设计周,为期四天的展会在广州保利世贸博览馆、广州国际采购中心和南丰国际会展中心三大展馆已落下帷幕。依旧熙攘,依旧热烈,远道而来的专家领导、媒体嘉宾、展商代表、外国友人、设计爱好者,风…...
WTN6系列语音芯片:PWM与DAC音频输出在PCB设计中的优势
随着科技的飞速发展,语音芯片在电子产品中的应用越来越广泛。其中,唯创知音的WTN6系列语音芯片凭借其卓越的性能和多样的功能,受到了市场的热烈欢迎。特别是其支持PWM和DAC两种音频输出方式的特点,使得工程师在PCB设计时能够更加灵…...
设计模式 原型模式 与 Spring 原型模式源码解析(包含Bean的创建过程)
原型模式 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类,并且通过拷贝这些原型,创建新的对象。 原型模式是一种创建型设计模式,允许一个对象再创建另外一个可定制的对象,无需知道如何创建的细节。 工作原…...
Docker介绍,Docker安装
docker镜像仓库官网 一、Docker的基本概念 1.Docker的三大核心组件 docker 镜像 --------docker images docker 仓库---------docker registeries docker 容器---------docker containers 2.Docker 镜像 Docker镜像是运行docker容器时的只读模板,每一个镜像由一…...
CLIP 对比学习 源码理解快速学习
最快的学习方法,理清思路,找视频讲解,看源码逻辑: CLIP 源码讲解 唐宇 输入: 图像-文本成对配对的数据 训练模型的过程(自己理解): 怎么做的?:利用数据内部…...
6.鸿蒙app_hap_DevEco如何真机调试模式_app安装在手机中
真机调试 手机》设置》关于手机》HarmonyOS版本》软件版本,连续单击10次启动开发者模式 然后:设置》系统和更新》开发人员选项》打开USB调试功能。 电脑USB连接手机,手机USB连接类型,传文件(不要选择仅充电…...
【JVM从入门到实战】(八)垃圾回收(1)
内存泄漏:指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出 什么是垃圾回收 Java中为了简化对象的释放,引入了自动的垃圾回收(Garbage Collection简称GC)机制。通过垃 圾回收器来对不再使用的…...
LeeCode前端算法基础100题(12)-删除有序数组中的重复项
一、问题详情: 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题…...
从检测到分析:手机位置热力图生成与行为模式挖掘扩展方案
从检测到分析:手机位置热力图生成与行为模式挖掘扩展方案 1. 引言:从“看见”到“看懂” 想象一下,你在一间大型会议室里,墙上挂着十几个监控摄像头。传统的监控系统能告诉你“画面里有手机”,但仅此而已。你无法知道…...
EC2Instances.info未来发展规划:AI驱动的智能实例推荐系统
EC2Instances.info未来发展规划:AI驱动的智能实例推荐系统 【免费下载链接】ec2instances.info Amazon EC2 instance comparison site 项目地址: https://gitcode.com/gh_mirrors/ec/ec2instances.info EC2Instances.info作为专业的Amazon EC2实例比较平台&a…...
usearch的API测试数据生成:使用Faker创建模拟数据
usearch的API测试数据生成:使用Faker创建模拟数据 【免费下载链接】usearch Fastest Open-Source Search & Clustering engine for Vectors & 🔜 Strings in C, C, Python, JavaScript, Rust, Java, Objective-C, Swift, C#, GoLang, and Wolf…...
「码动四季·开源同行」go实战案例:如何在 Go 微服务中实现负载均衡?
在上文章中,我们已经介绍了负载均衡的相关概念以及在服务高可用架构中的重要性,也了解了几种主流负载均衡算法的实现。在本文中,我们将在Go微服务实例中具体使用负载均衡技术,并详细说明如何基于服务发现来实现负载均衡的微服务间…...
影刀RPA实战:用Python字符串处理提升自动化效率(附5个常用脚本)
影刀RPA实战:5个Python字符串处理脚本解决自动化难题 在影刀RPA的自动化流程中,字符串处理就像流水线上的精密工具,直接决定了数据处理的准确性和效率。当我们需要从混乱的日志中提取关键信息、清洗客户提交的表格数据或转换不同系统的文本格…...
释放创意:Mi-Create让智能表盘设计触手可及
释放创意:Mi-Create让智能表盘设计触手可及 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 问题发现:智能表盘设计的三重困境 在智能穿…...
GitHub开源项目分享:SenseVoice-Small模型微调与领域适配工具链
GitHub开源项目分享:SenseVoice-Small模型微调与领域适配工具链 最近在语音识别领域,一个挺有意思的现象是,很多通用模型虽然能力很强,但一遇到专业领域的对话,比如医生讨论病例、律师分析法条,准确率就容…...
SeargeSDXL:让SDXL图像生成像搭积木一样简单的ComfyUI终极方案
SeargeSDXL:让SDXL图像生成像搭积木一样简单的ComfyUI终极方案 【免费下载链接】SeargeSDXL Custom nodes and workflows for SDXL in ComfyUI 项目地址: https://gitcode.com/gh_mirrors/se/SeargeSDXL 还在为ComfyUI中复杂的SDXL工作流程而头疼吗ÿ…...
Simulink Test Sequence模块在复杂逻辑测试中的高效应用
1. Test Sequence模块入门:逻辑测试的瑞士军刀 第一次接触Simulink Test Sequence模块时,我正被一个汽车电子控制单元(ECU)的状态机测试折磨得焦头烂额。传统脚本测试需要编写大量重复代码,而Test Sequence就像突然出现的瑞士军刀,…...
5分钟掌握:billd-desk跨平台远程控制高效解决方案
5分钟掌握:billd-desk跨平台远程控制高效解决方案 【免费下载链接】billd-desk 基于Vue3 WebRTC Nodejs Flutter搭建的远程桌面控制 项目地址: https://gitcode.com/gh_mirrors/bi/billd-desk 还在为远程办公的卡顿和限制而烦恼吗?当你急需远程…...
