做串口动态监测的时候,需要在打开软件的界面中,如果没有串口,就显示为空,如果中途手动插上串口线,可以监测出来,并改变下拉框的串口选项,如果此时拔掉串口线,可以再次改变下拉框的内容。
在网上查了一下,说wx.choice是一个只读控件,我尝试新建一个wx.choice控件,试图替换原来的,结果不可行。然后抱着试试看的心态,直接改内容,竟然可以工作了!
- self.timerPort = wx.Timer(self)
- self.Bind(wx.EVT_TIMER, self.OnTimerPort, self.timerPort)
- self.timerPort.Start(1000)
- def OnTimerPort(self, evt):
- plist = list(serial.tools.list_ports.comports())
- if len(plist)<=0:
- self.logout.AppendText(“没有串口\n”)
- self.portList = []
- self.portChoice.SetItems(self.portList)
- self.ClosePort()
- else:
- if self.portList==[]:
- index = 0
- for ser in plist:
- plist_0 = list(plist[index])
- serialName = plist_0[0]
- #self.serialFd = serial.Serial(serialName, 9600, timeout=60)
- #self.portList.append(self.serialFd.name)
- self.portList.append(serialName)
- index = index+1
- self.portList.reverse()
- self.portChoice.SetItems(self.portList)
def OntimerPort()方法前的三句是初始化一个定时器,定时检测串口。
plist = list(serial.tools.list_ports.comports())读取当前设备串口,如果能读到,就对wx.choice内容进行更改。
self.portList是串口名称列表,self.portChoice.SetItems(self.portList)可以直接修改下拉框的内容。
注意添加 self.portList==[]判断,避免同一个串口多次加入(这里也可以对串口进行检测,同一个串口不要加入到self.portList中去,但是这样会不断刷新wx.choice的内容,造成没法进行串口选择操作)