请使用python实现一个可视化程序,具有:一个开始按钮、一个列表框、一个显示框。列表框扫描并显示本机可用串口,选择列表框的串口,再点击开始按钮后,显示框实时打印串口的数据流
时间: 2024-02-25 11:54:56 浏览: 114
基于Python实现数据可视化【100011750】
好的,我可以为您编写这个Python程序。需要使用PySerial库来扫描并连接串口,以及Tkinter库来创建GUI界面。以下是代码实现:
```python
import serial
import threading
import tkinter as tk
from tkinter import ttk
# 扫描可用串口
def scan_serial_ports():
ports = []
for port in range(1, 20):
try:
ser = serial.Serial(port)
ports.append(ser.name)
ser.close()
except serial.SerialException:
pass
return ports
# 串口数据读取线程
def read_serial_data():
global ser, stop_flag
while not stop_flag:
try:
data = ser.readline().decode('utf-8').strip()
if data:
text.insert('end', data + '\n')
except:
pass
# 开始按钮点击事件
def start_serial_communication():
global ser, stop_flag, comm_port, baud_rate, text
# 关闭已有的串口连接
try:
ser.close()
except:
pass
# 打开新的串口连接
ser = serial.Serial(comm_port.get(), baud_rate.get())
# 启动数据读取线程
stop_flag = False
threading.Thread(target=read_serial_data).start()
# 关闭按钮点击事件
def stop_serial_communication():
global ser, stop_flag
# 停止数据读取线程
stop_flag = True
# 关闭串口连接
try:
ser.close()
except:
pass
# 创建GUI界面
root = tk.Tk()
root.title('串口通信程序')
# 创建控件
comm_port_label = ttk.Label(root, text='选择串口:')
baud_rate_label = ttk.Label(root, text='波特率:')
comm_port = ttk.Combobox(root, values=scan_serial_ports(), width=10)
baud_rate = ttk.Combobox(root, values=['9600', '115200'], width=10)
start_button = ttk.Button(root, text='开始', command=start_serial_communication)
stop_button = ttk.Button(root, text='停止', command=stop_serial_communication)
text = tk.Text(root, width=50, height=20)
# 布局控件
comm_port_label.grid(row=0, column=0)
comm_port.grid(row=0, column=1)
baud_rate_label.grid(row=0, column=2)
baud_rate.grid(row=0, column=3)
start_button.grid(row=0, column=4)
stop_button.grid(row=0, column=5)
text.grid(row=1, column=0, columnspan=6)
# 初始化变量
ser = None
stop_flag = False
# 进入主循环
root.mainloop()
```
这个程序会在GUI界面中显示可用的串口列表,您可以选择其中一个串口并设置波特率,然后点击开始按钮即可打开该串口连接并开始实时接收数据流,这些数据会实时显示在程序的显示框中。如果需要停止数据接收,可以点击停止按钮,或者直接关闭程序窗口。
阅读全文