Python使用Tkinter开发时如何实现串口列表自动刷新?
串口下拉列表自动刷新实现方案
实现逻辑
- 借助Tkinter内置的
after()定时器接口,定时扫描系统当前连接的串口设备 - 对比最新扫描结果与下拉框现有选项,仅当端口列表发生变化时才更新UI,避免不必要的性能消耗
- 新增选中状态保留逻辑:若用户之前选中的端口仍存在,刷新后不会丢失选中状态,若端口已拔除则自动清空选中
完整可运行代码
from tkinter.ttk import Combobox import serial import sys import serial.tools.list_ports from tkinter.messagebox import showinfo from tkinter import * window = Tk() window.title("test cell") window.geometry("300x200") selected = StringVar(window) m_select = Combobox(window, textvariable=selected) m_select['state'] = 'readonly' m_select.place(x=0, y=0) def refresh_serial_ports(): # 扫描当前所有串口设备 new_ports = list(serial.tools.list_ports.comports()) current_ports = list(m_select['values']) # 仅当端口列表发生变动时更新下拉框 if new_ports != current_ports: current_selected = selected.get() m_select['values'] = new_ports # 保留用户原有选中状态(若端口仍存在) if current_selected in [str(p) for p in new_ports]: selected.set(current_selected) else: selected.set("") # 1秒后再次执行刷新,可修改数值调整刷新间隔(单位:毫秒) window.after(1000, refresh_serial_ports) # 启动自动刷新任务 refresh_serial_ports() window.mainloop()
参数调整说明
- 可修改
after()方法的第一个参数调整刷新频率,比如设置为2000就是每2秒刷新一次,可根据实际使用场景平衡实时性和性能消耗 - 如果不需要保留选中状态,删除对应的状态判断代码即可
内容的提问来源于stack exchange,提问作者Mehrdad kh
相关产品推荐
相关产品推荐

