我是wxPython的新手,并希望用它来构建一个简单的动态UI,有条件地显示和隐藏一些下拉框,这可以在jQuery中轻松完成。
因此,从我的第一级组合框中,如果用户选择' Op1_1',则会出现第二级组合框A.另一方面,如果' Op1_2'如果选择,则在同一位置生成不同的第二级组合框B.
wxGridBagSizer::Add(): An item is already at that position
答案 0 :(得分:1)
答案 1 :(得分:1)
您可以使用的方法是创建第二个组合并隐藏它。 当在第一个组合上进行选择时,显示第二个组合并更改其选择以适应。
import wx
class landing_frame(wx.Frame):
def __init__(self, parent, title):
super(landing_frame, self).__init__(parent, title=title,
size=(450, 350))
self.font1 = wx.Font(18, wx.DECORATIVE, wx.ITALIC, wx.BOLD)
self.InitUI()
self.Centre()
self.Show()
def InitUI(self):
self.panel = wx.Panel(self)
self.sizer = wx.GridBagSizer(5, 5)
self.text1 = wx.StaticText(self.panel, label="Welcome!")
self.sizer.Add(
self.text1, pos=(0, 0),
flag=wx.TOP | wx.LEFT | wx.BOTTOM, border=15)
line = wx.StaticLine(self.panel)
self.sizer.Add(
line, pos=(1, 0), span=(1, 5),
flag=wx.EXPAND | wx.BOTTOM, border=10)
self.text2 = wx.StaticText(self.panel, label="First Level Dropdown")
self.sizer.Add(self.text2, pos=(2, 0), flag=wx.LEFT, border=10)
self.sampleList = ['', 'Op1_1', 'Op1_2']
self.combo1 = wx.ComboBox(self.panel, choices=self.sampleList)
self.combo1.Bind(wx.EVT_COMBOBOX, self.on_combo1)
self.sizer.Add(
self.combo1, pos=(2, 1), span=(1, 2), flag=wx.TOP | wx.EXPAND,
border=5)
self.combo2 = wx.ComboBox(self.panel)
self.combo2.Bind(wx.EVT_COMBOBOX, self.on_combo2)
self.sizer.Add(
self.combo2, pos=(3, 1), span=(1, 2), flag=wx.TOP | wx.EXPAND,
border=5)
self.panel.SetSizer(self.sizer)
self.Layout()
wx.CallAfter(self.combo2.Show, False)
def on_combo1(self, event):
self.user_choice = event.GetString()
if self.user_choice == '':
self.combo2.Show(False)
self.combo2.Clear()
return
self.combo2.Show(True)
if self.user_choice == "Op1_1":
self.combo2.SetItems(('Op2_1_1', 'Op2_1_2', 'Op2_1_3'))
elif self.user_choice == "Op1_2":
self.combo2.SetItems(('Op2_2_1', 'Op2_2_2', 'Op2_2_3'))
def on_combo2(self, event):
print '2nd combo choice: {}'.format(event.GetString())
if __name__ == '__main__':
app = wx.App(redirect=False)
landing_frame(None, title="Test")
app.MainLoop()