基于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文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/230028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode刷题笔记(3)】【Python】【最长连续序列】【中等】

文章目录 最长连续序列题目描述示例示例 1示例 2 提示 解决方案解决方案1:【集合去重】【遍历数组查找元素】避免无效计数方案1的可行性分析 解决方案2:【集合去重】 【遍历集合查找元素】运行结果复杂度分析 结束语 最长连续序列 最长连续序列 题目描述…

c语言 文件与文件操作

🏠 一.引言 我们日常生活中会将我们制作的ppt,word等存放在文件里进行归类,你是否知道我们能用cC语言对文件进行操作呢(比如文件的打开,关闭和读写等)?那接下来跟博主一起来学习下吧。 🏠二.什么是文件 磁盘上的文件就…

<VR串流线方案> PICO 4 Pro VR串流线方案 Oculus Quest2 Link串流线方案

虚拟现实技术(英文名称:Virtual Reality,缩写为VR),又称虚拟实境或灵境技术,是20世纪发展起来的一项全新的实用技术。虚拟现实技术囊括计算机、电子信息、仿真技术,其基本实现方式是以计算机技术为主,利用并…

MES系统工单进度查询:提升生产控制与监控

在MES系统中,工单进度查询是一个至关重要的功能,它为企业提供了实时、准确地追踪和监控生产工单进度的能力。 一、MES系统工单进度查询的重要性 1. 实时监控生产进度:通过工单进度查询,企业能够随时了解每个工单的进展情况&#…

qt实现基本文件操作

先通过ui界面实现基本框架 接下来就要实现每个按键的功能了 我们先来实现新建的的功能,我们右键新建键,可以发现没有转到槽的功能,因此我们要自己写connect来建立关系。 private slots:void newActionSlot(); 在.h文件中加上槽函数。 conne…

【ZYNQ学习】PL第一课

这节课讲什么? 这节课的名字本来是想写为LED,但这一课里除了LED也有按键,又想换为GPIO控制,但关于PL的GPIO控制,不应该这么草率和简单,而且这一课有很多和ZYNQ或者PL关联性不强的东西要说。 所以我写了删删…

【Go】基于GoFiber从零开始搭建一个GoWeb后台管理系统(四)用户管理、部门管理模块

第一篇:【Go】基于GoFiber从零开始搭建一个GoWeb后台管理系统(一)搭建项目 第二篇:【Go】基于GoFiber从零开始搭建一个GoWeb后台管理系统(二)日志输出中间件、校验token中间件、配置路由、基础工具函数。 …

眼镜店验光配镜处方单打印管理系统软件教程

一、前言 1、眼镜店原始的手写处方单逐步被电脑打印单取代 2、使用电脑开单,记录可以保存可以查询,而且同一个人配镜可以对比之前的信息 软件下载或技术支持可以点击最下方官网卡片 如上图,该软件有顾客信息模块,旧镜检查模块…

Acre1-6000电气火灾监控系统在工矿企业的应用——安科瑞 顾烊宇

摘要:主要介绍了电气火灾的主要原因、几种电气火灾监控系统的构成和设立意义。参照各规范,讨论了宜设立电气火灾监控系统的场所。该系统的设立可大大减少电气火灾事故的发生,对保证人们的生命财产安全具有重要意义。 关键词:电气火灾&#x…

极智开发 | macwindows本地部署安装AIGC绘图工具Stable Diffusion WebUI

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 mac&windows本地部署安装AIGC绘图工具Stable Diffusion WebUI。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0ai…

Redis-对象

参考资料 极客时间Redis(亚风) Redis对象 String • 基本编码⽅式是RAW,基于简单动态字符串(SDS)实现,存储上限为512mb。 • 如果存储的SDS⻓度⼩于44字节,则会采⽤EMBSTR编码,此…

2023年国家基地“楚慧杯”网络空间安全实践能力竞赛 Wp 一点WP

MISC 参考文章: 天权信安“”2023年国家基地“楚慧杯”网络安全实践能力竞赛初赛WriteUp ez-zip 使用脚本解套娃压缩包 import io import zipfilewith open("4096.zip", "rb") as f:data f.read()info "666"while True:with zi…

AttributeError: module ‘jax‘ has no attribute ‘Array‘解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。…

Linux——Ubuntu搭建FTP 时ftp: connect: Connection refused

如何解决ftp: connect: Connection refused? 分析:vsftpd.conf配置文件中默认ipv4:listenNO,ipv6:listen_ipv6YES,默认使用ipv6地址 解决方法:在配置文件中将listenYES开启,并且把listen_ipv6YES注释,重新启动vsftpd…

金蝶云星空和聚水潭单据接口对接

金蝶云星空和聚水潭单据接口对接 接入系统:聚水潭 聚水潭SaaSERP于2014年4月上线,目前累计超过2.5万商家注册使用,成为淘宝应用服务市场ERP类目商家数和商家月订单增速最快的ERP。2014年及2015年“双十一”当天,聚水潭SaaSERP平稳…

初识迭代器(Iterator)——迭代器模式——迭代加深(后续更新...)

学习网页: Welcome to Python.orghttps://www.python.org/ 迭代器(Iterator) 迭代器是一个非常有用的Python特性,它允许我们遍历一个容器(如列表、元组、字典、集合等)的元素。迭代器提供了一种方法&…

Vue中的数据变化监控与响应——深入理解Watchers

目录 ​编辑 前言 1. 基本用法: 2. 深度监听: 3. 立即执行: 4. 监听多个数据: 5. 清理监听器: 6. 监听路由变化: 总结: 我的其他博客 前言 在Vue.js中,watch是一种用于监听…

Kafka本地安装⭐️(Windows)并测试生产消息以及消费消息的可用性

2023.12.17 天气晴 温度较低 十点半,不是不想起实在是阳光浴太nice了日常三连,喂,刷,肝刷会儿博客,看会儿设计模式冷冷冷 进被窝 刷视频 睡觉看看kafka的本地部署 》》实践》》成功写会儿博客&#xff0c…

Web前端-HTML(表格与表单)

文章目录 1.表格与表单1.1 概述 2.表格 table2.1 表格概述2.2. 创建表格2.3 表格属性2.4. 表头单元格标签th2.5 表格标题caption(了解)2.6 合并单元格(难点)2.7 总结表格 3. 表单标签(重点)3.1 概述3.2 form表单3.3 input 控件(重点)type 属性value属性值…

Android 蓝牙BluetoothAdapter 相关(一)

Android 蓝牙相关 本文主要讲述android 蓝牙的简单使用. 1: 是否支持蓝牙 /*** 是否支持蓝牙** return*/ private boolean isSupportBluetooth() {BluetoothAdapter bluetoothAdapter BluetoothAdapter.getDefaultAdapter();return bluetoothAdapter ! null; }2: 开启蓝牙 …