股票

wx.choice动态改变下拉框的内容

做串口动态监测的时候,需要在打开软件的界面中,如果没有串口,就显示为空,如果中途手动插上串口线,可以监测出来,并改变下拉框的串口选项,如果此时拔掉串口线,可以再次改变下拉框的内容。

在网上查了一下,说wx.choice是一个只读控件,我尝试新建一个wx.choice控件,试图替换原来的,结果不可行。然后抱着试试看的心态,直接改内容,竟然可以工作了!

  1. self.timerPort = wx.Timer(self)  
  2.         self.Bind(wx.EVT_TIMER, self.OnTimerPort, self.timerPort)  
  3.         self.timerPort.Start(1000)  
  4. def OnTimerPort(self, evt):       
  5.         plist = list(serial.tools.list_ports.comports())  
  6.   
  7.         if len(plist)<=0:  
  8.             self.logout.AppendText(“没有串口\n”)  
  9.             self.portList = []  
  10.             self.portChoice.SetItems(self.portList)  
  11.             self.ClosePort()  
  12.         else:  
  13.             if self.portList==[]:  
  14.                 index = 0  
  15.                 for ser in plist:  
  16.                     plist_0 = list(plist[index])  
  17.                     serialName = plist_0[0]  
  18.                     #self.serialFd = serial.Serial(serialName, 9600, timeout=60)  
  19.                     #self.portList.append(self.serialFd.name)  
  20.                     self.portList.append(serialName)  
  21.                     index = index+1  
  22.                 self.portList.reverse()  
  23.                 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的内容,造成没法进行串口选择操作)

 

打赏
原文链接:,转发请注明来源!

发表评论