You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:06:01