wxPython - StaticBoxSizer

Un StaticBoxSizer coloca un medidor de caja en una caja estática. Proporciona un borde alrededor de la caja junto con una etiqueta en la parte superior. Los siguientes pasos están involucrados en la preparación de un statcboxsizer:

  • Cree un objeto wx.StaticBox.
  • Declare un wx.StaticBoxSizer con el cuadro estático anterior como argumento.
  • Cree los controles y agregue el medidor de staticbox.
  • Configúrelo como medidor para el marco.

Ejemplo

En el siguiente ejemplo, se crean dos medidores de caja estática y se agregan a un medidor de caja vertical superior, que controla el diseño del panel dentro de un marco.

El primer medidor de cuadro estático se crea alrededor de un cuadro estático llamado 'Nombre'.

nm = wx.StaticBox(panel, -1, 'Name:') 
nmSizer = wx.StaticBoxSizer(nm, wx.VERTICAL)

Un medidor de cuadro horizontal, que contiene dos etiquetas y dos cuadros de texto, se agrega al medidor de cuadro estático nmSizer.

nmbox = wx.BoxSizer(wx.HORIZONTAL)
  
fn = wx.StaticText(panel, -1, "First Name") 
nmbox.Add(fn, 0, wx.ALL|wx.CENTER, 5) 
nm1 = wx.TextCtrl(panel, -1, style = wx.ALIGN_LEFT) 
nm2 = wx.TextCtrl(panel, -1, style = wx.ALIGN_LEFT) 
ln = wx.StaticText(panel, -1, "Last Name") 
         
nmbox.Add(nm1, 0, wx.ALL|wx.CENTER, 5) 
nmbox.Add(ln, 0, wx.ALL|wx.CENTER, 5) 
nmbox.Add(nm2, 0, wx.ALL|wx.CENTER, 5)
  
nmSizer.Add(nmbox, 0, wx.ALL|wx.CENTER, 10)

De manera similar, otro medidor de cuadro estático contiene un cuadro estático llamado 'Botones'.

sbox = wx.StaticBox(panel, -1, 'buttons:') 
sboxSizer = wx.StaticBoxSizer(sbox, wx.VERTICAL)

Dos objetos de botón, llamados 'ok' y 'cancelar' se colocan en un medidor de caja horizontal, que a su vez, se coloca dentro del segundo medidor de caja estática.

hbox = wx.BoxSizer(wx.HORIZONTAL) 
okButton = wx.Button(panel, -1, 'ok') 

hbox.Add(okButton, 0, wx.ALL|wx.LEFT, 10) 
cancelButton = wx.Button(panel, -1, 'cancel') 

hbox.Add(cancelButton, 0, wx.ALL|wx.LEFT, 10) 
sboxSizer.Add(hbox, 0, wx.ALL|wx.LEFT, 10)

Se agregan dos medidores de caja estáticos, 'nombre' y 'botones' en un medidor de caja vertical que actúa como administrador de diseño del panel en el marco del nivel superior.

panel = wx.Panel(self) 
vbox = wx.BoxSizer(wx.VERTICAL)
  
vbox.Add(nmSizer,0, wx.ALL|wx.CENTER, 5) 
vbox.Add(sboxSizer,0, wx.ALL|wx.CENTER, 5) 
panel.SetSizer(vbox)

A continuación se muestra el código completo:

import wx 
 
class Mywin(wx.Frame): 
   def __init__(self, parent, title): 
      super(Mywin, self).__init__(parent, title = title)
		
      panel = wx.Panel(self) 
      vbox = wx.BoxSizer(wx.VERTICAL) 
      nm = wx.StaticBox(panel, -1, 'Name:') 
      nmSizer = wx.StaticBoxSizer(nm, wx.VERTICAL) 
       
      nmbox = wx.BoxSizer(wx.HORIZONTAL) 
      fn = wx.StaticText(panel, -1, "First Name") 
		
      nmbox.Add(fn, 0, wx.ALL|wx.CENTER, 5) 
      nm1 = wx.TextCtrl(panel, -1, style = wx.ALIGN_LEFT) 
      nm2 = wx.TextCtrl(panel, -1, style = wx.ALIGN_LEFT) 
      ln = wx.StaticText(panel, -1, "Last Name") 
         
      nmbox.Add(nm1, 0, wx.ALL|wx.CENTER, 5)
      nmbox.Add(ln, 0, wx.ALL|wx.CENTER, 5) 
      nmbox.Add(nm2, 0, wx.ALL|wx.CENTER, 5) 
      nmSizer.Add(nmbox, 0, wx.ALL|wx.CENTER, 10)  
		
      sbox = wx.StaticBox(panel, -1, 'buttons:') 
      sboxSizer = wx.StaticBoxSizer(sbox, wx.VERTICAL) 
		
      hbox = wx.BoxSizer(wx.HORIZONTAL) 
      okButton = wx.Button(panel, -1, 'ok') 
		
      hbox.Add(okButton, 0, wx.ALL|wx.LEFT, 10) 
      cancelButton = wx.Button(panel, -1, 'cancel') 
		
      hbox.Add(cancelButton, 0, wx.ALL|wx.LEFT, 10) 
      sboxSizer.Add(hbox, 0, wx.ALL|wx.LEFT, 10) 
      vbox.Add(nmSizer,0, wx.ALL|wx.CENTER, 5) 
      vbox.Add(sboxSizer,0, wx.ALL|wx.CENTER, 5) 
      panel.SetSizer(vbox) 
      self.Centre() 
         
      panel.Fit() 
      self.Show()  
		
app = wx.App() 
Mywin(None,  'staticboxsizer demo') 
app.MainLoop()

El código anterior produce la siguiente salida: