自动更新端口列表



我想用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()

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

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

我已经用一个虚拟函数测试了这一点,该函数返回随机数量的com端口,但这应该与serial.tools.comports函数相同。(你需要在你需要的行中注释,我在这台PC上没有串行)

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

最新更新