使用python中的tkinter模块写一个串口助手窗体程序,需要包括以下几个功能:1、能够自定义先择串口、波特率、数据为、校验位、停止位2、能够发送、接收数据

时间: 2023-10-20 20:12:20 浏览: 39
好的,下面是一个简单的串口助手窗体程序,基于Python的tkinter模块实现,包含了选择串口、波特率、数据位、校验位、停止位、发送数据和接收数据的功能: ``` import tkinter as tk import serial class SerialAssistant: def __init__(self, master): self.master = master self.master.title("串口助手") self.master.geometry("400x300") # 创建串口选择标签和下拉框 self.serial_label = tk.Label(self.master, text="串口") self.serial_label.grid(row=0, column=0) self.serial_var = tk.StringVar() self.serial_var.set("COM1") self.serial_option = tk.OptionMenu(self.master, self.serial_var, "COM1", "COM2", "COM3", "COM4") self.serial_option.grid(row=0, column=1) # 创建波特率选择标签和下拉框 self.baudrate_label = tk.Label(self.master, text="波特率") self.baudrate_label.grid(row=1, column=0) self.baudrate_var = tk.StringVar() self.baudrate_var.set("9600") self.baudrate_option = tk.OptionMenu(self.master, self.baudrate_var, "9600", "115200") self.baudrate_option.grid(row=1, column=1) # 创建数据位选择标签和下拉框 self.bytesize_label = tk.Label(self.master, text="数据位") self.bytesize_label.grid(row=2, column=0) self.bytesize_var = tk.StringVar() self.bytesize_var.set("8") self.bytesize_option = tk.OptionMenu(self.master, self.bytesize_var, "5", "6", "7", "8") self.bytesize_option.grid(row=2, column=1) # 创建校验位选择标签和下拉框 self.parity_label = tk.Label(self.master, text="校验位") self.parity_label.grid(row=3, column=0) self.parity_var = tk.StringVar() self.parity_var.set("N") self.parity_option = tk.OptionMenu(self.master, self.parity_var, "N", "E", "O") self.parity_option.grid(row=3, column=1) # 创建停止位选择标签和下拉框 self.stopbits_label = tk.Label(self.master, text="停止位") self.stopbits_label.grid(row=4, column=0) self.stopbits_var = tk.StringVar() self.stopbits_var.set("1") self.stopbits_option = tk.OptionMenu(self.master, self.stopbits_var, "1", "1.5", "2") self.stopbits_option.grid(row=4, column=1) # 创建发送数据输入框和按钮 self.send_label = tk.Label(self.master, text="发送数据") self.send_label.grid(row=5, column=0) self.send_entry = tk.Entry(self.master) self.send_entry.grid(row=5, column=1) self.send_button = tk.Button(self.master, text="发送", command=self.send_data) self.send_button.grid(row=5, column=2) # 创建接收数据文本框 self.receive_label = tk.Label(self.master, text="接收数据") self.receive_label.grid(row=6, column=0) self.receive_text = tk.Text(self.master, height=10, width=30) self.receive_text.grid(row=6, column=1) # 创建打开串口按钮 self.open_button = tk.Button(self.master, text="打开串口", command=self.open_serial) self.open_button.grid(row=7, column=0) # 创建关闭串口按钮 self.close_button = tk.Button(self.master, text="关闭串口", command=self.close_serial, state="disabled") self.close_button.grid(row=7, column=1) # 初始化串口对象 self.ser = None def open_serial(self): # 获取串口参数 port = self.serial_var.get() baudrate = int(self.baudrate_var.get()) bytesize = int(self.bytesize_var.get()) parity = self.parity_var.get() stopbits = float(self.stopbits_var.get()) try: # 创建串口对象 self.ser = serial.Serial(port=port, baudrate=baudrate, bytesize=bytesize, parity=parity, stopbits=stopbits) self.ser.timeout = 0.1 # 打开串口 self.ser.open() # 设置打开串口按钮状态为disabled,关闭串口按钮状态为normal self.open_button.configure(state="disabled") self.close_button.configure(state="normal") # 启动接收线程 self.receive_thread_running = True self.receive_thread = threading.Thread(target=self.receive_data) self.receive_thread.start() except Exception as e: tk.messagebox.showerror("错误", str(e)) def close_serial(self): try: # 关闭串口 self.ser.close() # 设置打开串口按钮状态为normal,关闭串口按钮状态为disabled self.open_button.configure(state="normal") self.close_button.configure(state="disabled") # 停止接收线程 self.receive_thread_running = False except Exception as e: tk.messagebox.showerror("错误", str(e)) def send_data(self): # 获取发送数据 data = self.send_entry.get() try: # 发送数据 self.ser.write(data.encode()) except Exception as e: tk.messagebox.showerror("错误", str(e)) def receive_data(self): while self.receive_thread_running: try: # 接收数据 data = self.ser.read_all().decode() if data: # 将接收到的数据显示在接收数据文本框中 self.receive_text.insert("end", data) self.receive_text.see("end") except Exception as e: pass if __name__ == "__main__": root = tk.Tk() app = SerialAssistant(root) root.mainloop() ``` 在程序中,选择串口、波特率、数据位、校验位、停止位都是使用tkinter的OptionMenu控件实现的,发送数据和接收数据分别使用了tkinter的Entry和Text控件。打开串口和关闭串口分别使用了Python的serial模块中的Serial类的open和close方法实现,接收数据使用了Python的serial模块中的Serial类的read_all方法实现。同时,为了避免串口读取阻塞GUI线程,接收数据部分使用了一个独立的线程来完成。

相关推荐

最新推荐

recommend-type

基于python tkinter的点名小程序功能的实例代码

主要介绍了基于python tkinter的点名小程序,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

Python实现在tkinter中使用matplotlib绘制图形的方法示例

主要介绍了Python实现在tkinter中使用matplotlib绘制图形的方法,结合实例形式分析了Python使用tkinter与matplotlib进行正弦曲线图形绘制的相关操作技巧,需要的朋友可以参考下
recommend-type

Python使用tkinter库实现文本显示用户输入功能示例

主要介绍了Python使用tkinter库实现文本显示用户输入功能,结合实例形式分析了tkinter库获取用户输入及控件显示相关操作技巧,需要的朋友可以参考下
recommend-type

Python3.7+tkinter实现查询界面功能

主要介绍了Python3.7+tkinter实现查询界面功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
recommend-type

在python tkinter界面中添加按钮的实例

今天小编就为大家分享一篇在python tkinter界面中添加按钮的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz

REALTEK 8188FTV 8188eus 8188etv linux驱动程序稳定版本, 支持AP,STA 以及AP+STA 共存模式。 稳定支持linux4.0以上内核。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

:YOLOv1目标检测算法:实时目标检测的先驱,开启计算机视觉新篇章

![:YOLOv1目标检测算法:实时目标检测的先驱,开启计算机视觉新篇章](https://img-blog.csdnimg.cn/img_convert/69b98e1a619b1bb3c59cf98f4e397cd2.png) # 1. 目标检测算法概述 目标检测算法是一种计算机视觉技术,用于识别和定位图像或视频中的对象。它在各种应用中至关重要,例如自动驾驶、视频监控和医疗诊断。 目标检测算法通常分为两类:两阶段算法和单阶段算法。两阶段算法,如 R-CNN 和 Fast R-CNN,首先生成候选区域,然后对每个区域进行分类和边界框回归。单阶段算法,如 YOLO 和 SSD,一次性执行检
recommend-type

info-center source defatult

这是一个 Cisco IOS 命令,用于配置 Info Center 默认源。Info Center 是 Cisco 设备的日志记录和报告工具,可以用于收集和查看设备的事件、警报和错误信息。该命令用于配置 Info Center 默认源,即设备的默认日志记录和报告服务器。在命令行界面中输入该命令后,可以使用其他命令来配置默认源的 IP 地址、端口号和协议等参数。
recommend-type

c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf

校园超市商品信息管理系统课程设计旨在帮助学生深入理解程序设计的基础知识,同时锻炼他们的实际操作能力。通过设计和实现一个校园超市商品信息管理系统,学生掌握了如何利用计算机科学与技术知识解决实际问题的能力。在课程设计过程中,学生需要对超市商品和销售员的关系进行有效管理,使系统功能更全面、实用,从而提高用户体验和便利性。 学生在课程设计过程中展现了积极的学习态度和纪律,没有缺勤情况,演示过程流畅且作品具有很强的使用价值。设计报告完整详细,展现了对问题的深入思考和解决能力。在答辩环节中,学生能够自信地回答问题,展示出扎实的专业知识和逻辑思维能力。教师对学生的表现予以肯定,认为学生在课程设计中表现出色,值得称赞。 整个课程设计过程包括平时成绩、报告成绩和演示与答辩成绩三个部分,其中平时表现占比20%,报告成绩占比40%,演示与答辩成绩占比40%。通过这三个部分的综合评定,最终为学生总成绩提供参考。总评分以百分制计算,全面评估学生在课程设计中的各项表现,最终为学生提供综合评价和反馈意见。 通过校园超市商品信息管理系统课程设计,学生不仅提升了对程序设计基础知识的理解与应用能力,同时也增强了团队协作和沟通能力。这一过程旨在培养学生综合运用技术解决问题的能力,为其未来的专业发展打下坚实基础。学生在进行校园超市商品信息管理系统课程设计过程中,不仅获得了理论知识的提升,同时也锻炼了实践能力和创新思维,为其未来的职业发展奠定了坚实基础。 校园超市商品信息管理系统课程设计的目的在于促进学生对程序设计基础知识的深入理解与掌握,同时培养学生解决实际问题的能力。通过对系统功能和用户需求的全面考量,学生设计了一个实用、高效的校园超市商品信息管理系统,为用户提供了更便捷、更高效的管理和使用体验。 综上所述,校园超市商品信息管理系统课程设计是一项旨在提升学生综合能力和实践技能的重要教学活动。通过此次设计,学生不仅深化了对程序设计基础知识的理解,还培养了解决实际问题的能力和团队合作精神。这一过程将为学生未来的专业发展提供坚实基础,使其在实际工作中能够胜任更多挑战。