wxpython-如何从类外刷新列表框?

wxpython-如何从类外刷新列表框?,python,wxpython,wxwidgets,Python,Wxpython,Wxwidgets,*在我的应用程序中,我有两个面板。。类1表示包含按钮的侧栏面板。类2表示包含listbox的主面板 如何通过其父级属于另一个类(两个)的按钮(在本例中是从列表框中删除项)调用函数?* 有一种方法可以做到这一点,那就是使用酒吧间酒吧 class ListCtrl(wx.ListCtrl): def __init__(self, parent): super(ListCtrl, self).__init__(parent,size=(1200,700)) def

*在我的应用程序中,我有两个面板。。类1表示包含按钮的侧栏面板。类2表示包含listbox的主面板

  • 如何通过其父级属于另一个类(两个)的按钮(在本例中是从列表框中删除项)调用函数?*


  • 有一种方法可以做到这一点,那就是使用酒吧间酒吧

    class ListCtrl(wx.ListCtrl):
    
        def __init__(self, parent):
            super(ListCtrl, self).__init__(parent,size=(1200,700))
    
        def delete_items(self):
            self.DeleteAllItems()
    
    class One(wx.Panel):
        b =wx.Button()
        b.bind(**Listbox.delete_items**)
    
    
    class Two(wx.Panel):
        self.lb = Listbox(self)
    

    也就是说,有很多方法可以实现这一点

    是的,但pubsub可能是最好的方法……或者说是最干净的方法之一——这正是我想要的。我必须使用“from wx.lib.pubsub import setuparg1”和“from wx.lib.pubsub import pub”来避免导入错误。
    from wx.lib.pubsub import Publisher
    pub = Publisher()
    all_options = "One Two Three".split()
    class One(wx.Panel):
         def on_delete_button(self,evt):
             all_options.pop(0)
             pub.sendMessage("update.options",
    
    class Two(wx.Panel):
         def __init__(self,*args,**kwargs):
            self.lb = Listbox(self)
            self.lb.SetItems(all_options)
            pub.subscribe("update.options",lambda e:self.lb.SetItems(e.data))