如果用户在第一个wx.ComboBox
中选择“广告系列”,我将尝试更改第二个wx.ComboBox
的选择。
下面的代码不起作用,我的意思是第二个wx.ComboBox
上的选择保持不变。
我需要您的帮助。谢谢
class Test(wx.Frame):
def __init__(self,parent,id):
wx.Frame.__init__(self,parent,id, "Frame aka Window", style= wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX, size=(400, 635))
self.filterValues = ['Campaign','Spent', 'Network Impr.', 'Network Clicks', 'Rev. /1000', 'GA Impr.', 'Revenue', 'eCPC', 'CPC', 'CTR']
self.filterComboColumns = wx.ComboBox(self.panel,choices = self.filterValues, size = (100,-1))
self.Bind(wx.EVT_COMBOBOX, self.onComboValues, self.filterComboColumns)
self.filterContainsValues = ['Contains', 'Doesn\'t contain' , '<', '>']
self.filterComboContains = wx.ComboBox(self.panel,choices = self.filterContainsValues, size = (100,-1))
self.filterComboContains.Enable(False)
self.Bind(wx.EVT_COMBOBOX, self.onComboContains, self.filterComboContains)
self.filterInput = wx.TextCtrl(self.panel, wx.ID_ANY, size=(145, 24))
self.filterInput.Enable(False)
self.filterInput.SetFont(font)
self.Bind(wx.EVT_TEXT, self.onComboInput, self.filterInput)
def onComboValues(self, event):
cb = event.GetEventObject()
if cb.GetValue() == "Campaign":
self.filterComboContains.Enable(True)
self.filterContainsValues = []
self.filterContainsValues.append('Contains')
self.filterContainsValues.append('Doesn\'t contain')
答案 0 :(得分:2)
您仅缺少对Set
方法的调用。更改包含选项的列表是不够的,您需要告诉wx.ComboBox
列表已更改。 Set
方法就是这样做的。
带注释(####
)的代码:
import wx
class Test(wx.Frame):
def __init__(self, parent, id):
wx.Frame.__init__(self, parent, id, "Frame aka Window", style= wx.SYSTEM_MENU | wx.CAPTION | wx.CLOSE_BOX | wx.MINIMIZE_BOX, size=(400, 635))
self.panel = wx.Panel(self)
self.filterValues = ['Campaign','Spent', 'Network Impr.', 'Network Clicks', 'Rev. /1000', 'GA Impr.', 'Revenue', 'eCPC', 'CPC', 'CTR']
self.filterComboColumns = wx.ComboBox(self.panel, choices = self.filterValues, size = (100,-1))
self.Bind(wx.EVT_COMBOBOX, self.onComboValues, self.filterComboColumns)
self.filterContainsValues = ['Contains', 'Doesn\'t contain' , '<', '>']
self.filterComboContains = wx.ComboBox(self.panel,choices = self.filterContainsValues, size = (100,-1))
self.filterComboContains.Enable(False)
#self.Bind(wx.EVT_COMBOBOX, self.onComboContains, self.filterComboContains)
self.filterInput = wx.TextCtrl(self.panel, wx.ID_ANY, size=(145, 24))
self.filterInput.Enable(False)
#self.filterInput.SetFont(font)
#self.Bind(wx.EVT_TEXT, self.onComboInput, self.filterInput)
#### Sizer
self.sizer = wx.BoxSizer()
self.sizer.Add(self.filterComboColumns)
self.sizer.Add(self.filterComboContains)
self.sizer.Add(self.filterInput)
self.panel.SetSizer(self.sizer)
def onComboValues(self, event):
cb = event.GetEventObject()
if cb.GetValue() == "Campaign":
self.filterComboContains.Enable(True)
self.filterContainsValues = []
self.filterContainsValues.append('Contains')
self.filterContainsValues.append('Doesn\'t contain')
#### The line below is the line you were missing
self.filterComboContains.Set(self.filterContainsValues)
#### This is to avoid showing an empty field when the values change
self.filterComboContains.SetSelection(0)
else:
pass
# Run the program
if __name__ == "__main__":
app = wx.App()
frame = Test(None, 1)
frame.Show()
app.MainLoop()