这对我很有效,绑定EVT_COMBOBOX_下拉列表来更新列表,而绑定EVT_COMBOBOX来运行用户选择的函数。这样更新,然后显示更新的内容。如果新的选择更少,它就不会留下先前选择的空白。您还可以将组合框设置为只读,以作为选项小部件(用户不可编辑),如下所示。这段代码在Windows、python3.6和更新的wxpython(phoenix)下进行了测试。在import wx
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (300,200))
panel = wx.Panel(self)
box = wx.BoxSizer(wx.VERTICAL)
self.label = wx.StaticText(panel,label = "Your choice:" ,style = wx.ALIGN_CENTRE)
box.Add(self.label, 0 , wx.EXPAND |wx.ALIGN_CENTER_HORIZONTAL |wx.ALL, 20)
cblbl = wx.StaticText(panel,label = "Combo box",style = wx.ALIGN_CENTRE)
box.Add(cblbl,0,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)
# initial chioces are 5
#
languages = ['C', 'C++', 'Python', 'Java', 'Perl']
#
self.combo = wx.ComboBox(panel,choices = languages, style = wx.CB_READONLY)
box.Add(self.combo,0,wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL,5)
self.combo.Bind(wx.EVT_COMBOBOX ,self.OnCombo)
self.combo.Bind(wx.EVT_COMBOBOX_DROPDOWN,self.updatelist)
panel.SetSizer(box)
self.Centre()
self.Show()
def OnCombo(self, event):
self.label.SetLabel("You selected "+self.combo.GetValue()+" from Combobox")
def updatelist(self, event):
# Chioces are now just 2
#
OtrosLanguajes = ['C++', 'Python']
#
self.combo.SetItems(OtrosLanguajes)
app = wx.App()
Mywin(None, 'ComboBox and Choice demo')
app.MainLoop()