首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用combobox1 wxpython的选择动态更新combobox 2

使用combobox1 wxpython的选择动态更新combobox 2
EN

Stack Overflow用户
提问于 2016-07-01 22:09:33
回答 1查看 484关注 0票数 0

我对python很陌生,并试图学习一些基本代码。我正在做一些项目,下面有演示代码。

在这段代码中,我唯一不能更改的是__init__def update()部件,因为它们也链接到其他代码。

问题是,当我在combobox-1上选择值为'2‘时,我在combobox-2中得到的值为'B100,B200,B300’,但是如果在combobox-1上选择值'1‘,在选择值'2’之后,就不会得到任何更新的列表。如果需要,复制并粘贴到IDE上的代码。

代码语言:javascript
复制
#!/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()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-06 15:46:34

不要混淆对象属性和方法。self.list1 != self.list1(),一个事实是Python试图通过第二次调用self.update时引发一个错误来告诉您。见一个更明确区分关切事项的例子:

代码语言:javascript
复制
class MyFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

        self.p1 = wx.Panel(self)
        self.lst1 = ['1','2','3']
        self.lst2 = self.get_lst2()

        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, pos=(-1,100), size=(100,-1))

        self.st.Bind(wx.EVT_COMBOBOX, self.update)

    def get_lst2(self, selectn=None):
        lst =['A100','A200','A300','B100','B200','B300','C100','C200','C300','D100','D200','D300']

        ret =  []
        if selectn == '1':
            for entry in lst:
                if entry.startswith('A'):
                    ret.append(entry)
        elif selectn == '2':
            for entry in lst:
                if entry.startswith('B'):
                    ret.append(entry)
        else:
            ret = lst
        return ret

    def update(self, event):
        selectn = self.st.GetStringSelection()
        self.lst2 = self.get_lst2(selectn)
        self.st2.Clear()
        for number in self.lst2:
            self.st2.Append(number)
        if selectn == '1':
            self.st.Hide()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38154448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档