python 中的自动更新端口列表

auto update port list in python

我想用 tkinter 创建一个用户界面,它包括读取串口。 我使用这样的代码

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")

ports=list(serial.tools.list_ports.comports())

selected=StringVar(window)
m_select=Combobox(window,textvariable=selected)
m_select['values']=ports
m_select['state']='readonly'
m_select.place(x=0,y=0)
window.mainloop()

在这种情况下,我可以读取所有连接的设备,但如果我连接或断开新设备,我将看不到它,我必须关闭文件并再次 运行。 有什么办法可以自动刷新而不用关闭吗??

请参阅以下示例,在单击向下箭头时更新组合框中的列表。

我已经用虚拟函数测试了这个 returns 随机数量的 com 端口,但这应该与 serial.tools.comports 函数一样工作。 (你需要在你需要的行中回复,我在这台电脑上没有序列号)

from tkinter.ttk import Combobox
#import serial
import sys
#import serial.tools.list_ports
from tkinter.messagebox import showinfo
from tkinter import *

def comports():
    """Dummy function, remove me for the real thing"""
    import random
    ports = [f"COM{i}" for i in range(random.randint(1,10))]
    return ports

def updateComPortList():
    #ports=list(serial.tools.list_ports.comports())
    ports = comports()
    m_select['values']=ports

window=Tk()
window.title("test cell")

selected=StringVar(window)
m_select=Combobox(window,textvariable=selected,postcommand = updateComPortList)
m_select['state']='readonly'
m_select.place(x=0,y=0)

window.mainloop()