我是新來的python,並試圖學習一些基本的代碼。我正在研究一些項目,我有下面的演示代碼。動態更新combobox 2與選擇combobox1 wxpython
,我不能在這個代碼修改的東西是__init__和高清更新()它們鏈接到一些其他的代碼以及部分堂妹。
問題是當我在組合框1上選擇值爲'2'時,我在組合框2中將值設置爲'B100,B200,B300',但是如果在選擇值後選擇組合框1上的值'1' '2',我的組合框2上沒有任何更新的列表。如果需要,複製並粘貼IDE代碼。
#!/usr/bin/python
#20_combobox.py
import wx
import wx.lib.inspection
class MyFrame(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, *args, **kwargs)
self.p1 = wx.Panel(self)
lst = ['1','2','3']
self.st = wx.ComboBox(self.p1, -1, choices = self.lst1(), style=wx.TE_PROCESS_ENTER)
self.st2 = wx.ComboBox(self.p1, -1, choices = self.lst2(), style=wx.TE_PROCESS_ENTER)
self.st.Bind(wx.EVT_COMBOBOX, self.update)
self.st2.Bind(wx.EVT_COMBOBOX, self.update)
def lst1(self):
lst=['1','2','3']
return lst
def lst2(self):
lst =['A100','A200','A300','B100','B200','B300','C100','C200','C300','D100','D200','D300']
dummyvar=[]
dummyvar1=[]
if self.st.GetStringSelection() == '1':
self.st2.Clear()
for number in lst:
if number.startswith('A'):
# if number.startswith('A'):
self.st2.Append(number)
self.st.Hide()
elif self.st.GetStringSelection() == '2':
self.st2.Clear()
for number in lst:
if number.startswith('B'):
self.st2.Append(number)
return lst
def update(self, event):
self.lst1a=self.lst1()
self.lst2a=self.lst2()
class MyApp(wx.App):
def OnInit(self):
frame = MyFrame(None, -1, '20_combobox.py')
frame.Show()
self.SetTopWindow(frame)
return 1
if __name__ == "__main__":
app = MyApp(0)
# wx.lib.inspection.InspectionTool().Show()
app.MainLoop()
Python是一個學習非常好的語言,因爲它是非常具體的,(幾乎)總是當它告訴你非常有幫助的是什麼不喜歡。因此,就你的情況而言,當你首先選擇'2',然後'1'(實際上順序無關緊要,例如選擇'2'兩次給出完全相同的錯誤),你會不喜歡Python? – nepix32
所以任何人都可以告訴我,我想如何使combobox-2依賴combobox-1? – ryuk