Home > python, wxPython > wxpython: switch between different panels

wxpython: switch between different panels

9 Novembre 2018
import wx


ID_PANEL_1 = 10001
ID_PANEL_2 = 10002


class PanelOne(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent)
        self.btn = wx.Button(self, label="Button 1")
        self.size_x = 300
        self.size_y = 300
        self.SetSize((self.size_x, self.size_y))


class PanelTwo(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent)
        self.btn = wx.Button(self, label="Button 2")
        self.size_x = 200
        self.size_y = 200
        self.SetSize((self.size_x, self.size_y))


class CommonFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, "Test")
        self.panel_one = PanelOne(self)
        self.panel_two = PanelTwo(self)
        self.panel_two.Hide()

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.sizer.Add(self.panel_one, 1, wx.EXPAND)
        self.sizer.Add(self.panel_two, 1, wx.EXPAND)
        self.SetSizer(self.sizer)

        self.panels = {ID_PANEL_1: self.panel_one,
                       ID_PANEL_2: self.panel_two}

        menu_bar = wx.MenuBar()
        menu = wx.Menu()
        switch_to_panel_1 = menu.Append(ID_PANEL_1, "to panel 1", "Some text")
        switch_to_panel_2 = menu.Append(ID_PANEL_2, "to panel 2", "Some text")
        menu_bar.Append(menu, "switch panels")
        self.SetMenuBar(menu_bar)

        self.Bind(wx.EVT_MENU, self.on_switch, switch_to_panel_1)
        self.Bind(wx.EVT_MENU, self.on_switch, switch_to_panel_2)
        self.Bind(wx.EVT_BUTTON, self.on_btn_1, self.panel_one.btn)
        self.Bind(wx.EVT_BUTTON, self.on_btn_2, self.panel_two.btn)

    def on_btn_1(self, event):
        print("BUTTON 1 CLICKED")

    def on_btn_2(self, event):
        print("BUTTON 2 CLICKED")

    def on_switch(self, event):
        for ids in [k for k in self.panels.keys() if k != event.GetId()]:
            self.panels[ids].Hide()
        panel = self.panels[event.GetId()]
        panel.Show()
        self.SetSize((panel.size_x, panel.size_y))
        self.sizer.Layout()


if __name__ == "__main__":
    app = wx.App(False)
    frame = CommonFrame()
    frame.Show()
    app.MainLoop()
Categorie:python, wxPython Tag: ,
I commenti sono chiusi.