Python 简单串口收发GUI界面

使用Python的Tkinter库,结合ttk模块中的combox,成功创建了一个串口通信的图形用户界面。该界面能实现与STM32F103等下位机的简单收发功能,尽管目前缺少错误提示,但已具备基本的串口通信功能。
摘要由CSDN通过智能技术生成

       忙活了三个多小时,连学带做,总算是搞出来了一个具有基本功能的串口通信PC机的GUI界面,Tkinter在python中确实很好用,而且代码量确实也很少,不足的是Tkinter不自带combox,但是幸运的是我下载的2.7版本自带了包含有combox的ttk模块,于是乎问题就顺利解决了。下面是源代码,一些错误提示功能还没有做,目前只是简单地实现了下位机与PC的通信界面,下位机还是用的STM32F103

#encoding=utf-8
__author__ = 'freedom'

from Tkinter import *
from serial import *
import ttk

class GUI(Frame):
    def __init__(self,master):
        frame = Frame(master)
        frame.pack()
        #串口设置相关变量
        self.port = 0
        self.baudrate = 9600
        #串口号提示
        self.lab1 = Label(frame,text = 'Serial Number')
        self.lab1.grid(row = 0,column = 0,sticky = W)
        #串口号选择下拉菜单
        self.boxValue = StringVar()
        self.boxChoice = ttk.Combobox(frame,textvariable = self.boxValue,state = 'readonly')
        self.boxChoice['value'] = ('COM1'
Python使用 `wxWidgets` 创建一个串口通信的 GUI,需要结合 `pySerial` 库来实现串口交互。下面是一个简单的示例代码,展示了一个窗口,用户可以选择串口号和波特率,然后可以发送和接收串口数据: ```python import wx from pyserial import Serial class MyFrame(wx.Frame): def __init__(self, parent=None): super().__init__(parent, title="Python Serial GUI", size=(400, 300)) self.serial = None # 初始化串口选择面板 serial_panel = wx.Panel(self) serial_box_sizer = wx.BoxSizer(wx.VERTICAL) self.combo_port = wx.ComboBox(serial_panel, choices=Serial().list_ports(), style=wx.CB_READONLY) self.text_ctrl_baudrate = wx.TextCtrl(serial_panel, value="9600") send_button = wx.Button(serial_panel, label="Send") receive_button = wx.Button(serial_panel, label="Receive") serial_box_sizer.Add(self.combo_port, proportion=1, flag=wx.EXPAND) serial_box_sizer.Add(wx.StaticText(serial_panel, label="Baud Rate"), flag=wx.LEFT, border=5) serial_box_sizer.Add(self.text_ctrl_baudrate, flag=wx.EXPAND) serial_box_sizer.Add(send_button, flag=wx.ALL, border=5) serial_box_sizer.Add(receive_button, flag=wx.ALL, border=5) serial_panel.SetSizer(serial_box_sizer) # 发送按钮事件处理器 def on_send_click(event): baud_rate = int(self.text_ctrl_baudrate.GetValue()) try: self.connect_serial(baud_rate) self.send_data("Hello from GUI!") except Exception as e: wx.MessageBox(str(e), "Error", wx.OK | wx.ICON_ERROR) send_button.Bind(wx.EVT_BUTTON, on_send_click) # 接收数据处理 def on_receive_click(event): try: data = self.receive_data() wx.MessageBox(f"Received data: {data}", "Message", wx.OK) except Exception as e: wx.MessageBox(str(e), "Error", wx.OK | wx.ICON_ERROR) receive_button.Bind(wx.EVT_BUTTON, on_receive_click) def connect_serial(self, baud_rate): self.serial = Serial(port=self.combo_port.GetStringSelection(), baudrate=baud_rate) self.serial.timeout = 1 # 设置超时时间,防止阻塞 def send_data(self, data): if self.serial: self.serial.write(data.encode('utf-8')) print(f"Sent: {data}") def receive_data(self): if self.serial: response = self.serial.read_until(b'\r\n') # 假设数据是以换行符分隔 return response.decode().strip() if __name__ == "__main__": app = wx.App() frame = MyFrame() frame.Show(True) app.MainLoop() ``` 这个例子中,我们创建了两个按钮,当点击“Send”按钮时会连接到选定的串口并发送数据,点击“Receive”按钮则尝试从串口读取数据。注意实际使用时需要对异常情况进行处理。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值