Ver Mensaje Individual
  #12 (permalink)  
Antiguo 15/01/2013, 05:04
tecafede
 
Fecha de Ingreso: noviembre-2012
Mensajes: 111
Antigüedad: 12 años, 1 mes
Puntos: 6
Respuesta: wxGlade - Layout 1 barra de herramientas + 2 paneles

Navegando por allí encontré otro ejemplo de barra de herramientas con botones y cambio de paneles.

Lo pego acá por si a alguien le sirve de referencia.

Ya que estamos, en este nuevo ejemplo el programador opta por "destruir" el panel que deja de estar activo. Más allá de que en algunos casos podría no ser necesario (por ejemplo si volvemos a llamar a un botón de la toolbar queremos que el panel vuelva en el mismo estado en que lo dejamos) supongo que se hace por un tema de ahorro de memoria no? es decir, no dejar abiertas cosas que ya no usamos?

Código Python:
Ver original
  1. import wx
  2.  
  3. ID_RED = wx.NewId()
  4. ID_BLUE = wx.NewId()
  5.  
  6. class MyFrame(wx.Frame):
  7.     def __init__(self, parent):
  8.         wx.Frame.__init__(self, parent, title="Test")
  9.  
  10.         # Attributes
  11.         self.panel = MainPanel(self)
  12.  
  13.         # Setup
  14.         toolbar = wx.ToolBar(self)
  15.         bmp = wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_TOOLBAR)
  16.         toolbar.AddTool(ID_RED, bmp, shortHelpString="Red Panel")
  17.         toolbar.AddTool(ID_BLUE, bmp, shortHelpString="Blue Panel")
  18.         toolbar.Realize()
  19.         self.SetToolBar(toolbar)
  20.  
  21.         # Event Handlers
  22.         self.Bind(wx.EVT_TOOL, self.OnTool, id=ID_RED)
  23.         self.Bind(wx.EVT_TOOL, self.OnTool, id=ID_BLUE)
  24.  
  25.     def OnTool(self, evt):
  26.         e_id = evt.GetId()
  27.         if e_id == ID_RED:
  28.             self.panel.SetPanel("RED")
  29.         elif e_id == ID_BLUE:
  30.             self.panel.SetPanel("BLUE")
  31.         else:
  32.             evt.Skip()
  33.  
  34. class MainPanel(wx.Panel):
  35.     def __init__(self, parent):
  36.         wx.Panel.__init__(self, parent)
  37.  
  38.         # Attributes
  39.         self.sizer = wx.BoxSizer()
  40.         self.panel = wx.Panel(self)
  41.  
  42.         # Setup
  43.         self.panel.SetBackgroundColour(wx.BLACK)
  44.         self.sizer.Add(self.panel, 1, wx.EXPAND)
  45.         self.SetSizer(self.sizer)
  46.  
  47.     def SetPanel(self, ptype):
  48.         if ptype == "RED":
  49.             newpanel = wx.Panel(self)
  50.             newpanel.SetBackgroundColour(wx.RED)
  51.             self.sizer.Replace(self.panel, newpanel)
  52.             self.panel.Destroy()
  53.             self.panel = newpanel
  54.             self.Layout()
  55.         elif ptype == "BLUE":
  56.             newpanel = wx.Panel(self)
  57.             newpanel.SetBackgroundColour(wx.BLUE)
  58.             self.sizer.Replace(self.panel, newpanel)
  59.             self.panel.Destroy()
  60.             self.panel = newpanel
  61.             self.Layout()
  62.         else:
  63.             pass
  64.  
  65. if __name__ == '__main__':
  66.     app = wx.App(False)
  67.     frame = MyFrame(None)
  68.     frame.Show()
  69.     app.MainLoop()