wxPython的wx.Notebook中的选项卡之间的事件

时间:2016-09-19 04:46:02

标签: wxpython

我正在尝试使用wxPython的wx.Notebook创建两个选项卡;但是,如果按钮和ListBox位于不同的选项卡中,我很难理解我应该放置Bind()的位置。

以下是我的代码的外观:它包含TabOne类,TabTwowx.Panel。班级enrollmentwx.Frame,使用TabOneTabTwo作为小组。

class TabOne(wx.Panel):
    def __init__(self,parent):
        wx.Panel.__init__(self, parent)
        btn = wx.Button(self, 1, "Add", (120,110))

class TabTwo(wx.Panel):
    def __init__(self,parent):
        wx.Panel.__init__(self, parent)
        lst = wx.ListBox(self, 1, (40,40))

class enrollment(wx.Frame):
    def __init__(self, *args, **kargs):
        super(enrollment, self).__init__(*args, **kargs)

        panel = wx.Panel(self)
        nb = wx.Notebook(panel)

        tab1 = TabOne(nb)
        tab2 = TabTwo(nb)

        nb.AddPage(tab1, "Button")
        nb.AddPage(tab2, "ListBox")

        sizer = wx.BoxSizer()

        sizer.Add(nb, 1, wx.EXPAND)
        panel.SetSizer(sizer)

        self.Show(True)

def main():
    app = wx.App()
    enrollment(None)
    app.MainLoop()

if __name__ = '__main__':
    main()  

想知道我是否要在Bind()中为btn添加TabOne,以便更新ListBox中的TabTwo我应该为它添加定义吗?我此刻不知所措。多谢你们。

1 个答案:

答案 0 :(得分:1)

您可以通过不同的方式进行整理。 按钮的绑定是一回事,您在处理程序中执行的操作是另一个。我的方法是让enrollment类处理绑定和操作,因为它知道两个选项卡。您不希望在TabOne和TabTwo之间创建依赖关系。

class TabOne(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.btn = wx.Button(self, 1, "Add", (120,110))

    def BindButton(self, handler):
        # let users of TabOne to register their button handler
        self.btn.Bind(wx.EVT_BUTTON, handler)

class TabTwo(wx.Panel):
    def __init__(self,parent):
        wx.Panel.__init__(self, parent)
        self.lst = wx.ListBox(self, 1, (40,40))

    def InformButtonClicked(self):
        # signal to TabTwo about the button click
        self.lst.Append("Item")

class enrollment(wx.Frame):
    def __init__(self, *args, **kargs):
        super(enrollment, self).__init__(*args, **kargs)

        panel = wx.Panel(self)
        nb = wx.Notebook(panel)

        self.tab1 = TabOne(nb)
        self.tab2 = TabTwo(nb)
        # register your button handler
        self.tab1.BindButton(self.button_handler)

        nb.AddPage(self.tab1, "Button")
        nb.AddPage(self.tab2, "ListBox")

        sizer = wx.BoxSizer()

        sizer.Add(nb, 1, wx.EXPAND)
        panel.SetSizer(sizer)

        self.Show(True)

    def button_handler(self, evt):
        # this method gets called when the button is clicked
        self.tab2.InformButtonClicked()