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()
Commenti recenti