wxPython - BoxSizer

Este medidor permite que los controles se organicen en filas o columnas. BoxSizer’s el diseño está determinado por su argumento de orientación (ya sea wxVERTICAL o wxHORIZONTAL).

Box = wx.BoxSizer(wxHORIZONTAL)
Box = wx.BoxSizer(wxVERTICAL)

El método Add () (heredado de wxSizer) lo agrega a la siguiente fila / columna del medidor.

Box.Add(control, proportion, flag, border)

El parámetro de proporción controla cómo el control cambia su tamaño en respuesta a las dimensiones del contenedor. La combinación de varios parámetros de bandera decide la apariencia del control en el medidor. A continuación se muestran algunas de las banderas:

Banderas de alineación

wx.ALIGN_TOP
wx.ALIGN_BOTTOM
wx.ALIGN_LEFT
wx.ALIGN_RIGHT
wx.ALIGN_CENTER_VERTICAL
wx.ALIGN_CENTER_HORIZONTAL

Banderas fronterizas

wx.TOP
wx.BOTTOM
wx. IZQUIERDA
wx.RIGHT
wx.ALL

Banderas de comportamiento

SN Banderas de comportamiento y descripción
1

wx.EXPAND

El artículo se expandirá para llenar el espacio provisto (wx.GROW es el mismo)

2

wx.SHAPED

Similar a EXPAND, pero mantiene la relación de aspecto del elemento

3

wx.FIXED_MINSIZE

No permite que el artículo sea más pequeño que su tamaño mínimo inicial

4

wx.RESERVE_SPACE_EVEN_IF_ HIDDEN

No permite que el medidor recupere el espacio de un elemento cuando está oculto

El parámetro de borde es un número entero, el espacio en píxeles que se deja entre los controles. Por ejemplo,

b = wx.StaticText(self, -1, “Enter a number”) 
Box.Add(b,1,wx.ALL|wx.EXPAND,10)

A continuación se muestran algunos métodos más de la clase wx.BoxSizer:

SN Métodos y descripción
1

SetOrientation()

Establece la orientación wxHORIZONTAL o wxVERTICAL

2

AddSpacer()

Agrega espacio no extensible

3

AddStretchSpacer()

Agrega espacio extensible para que el cambio de tamaño de la ventana afecte proporcionalmente el tamaño del control

4

Clear()

Elimina a los niños del medidor

5

Detach()

Elimina un control del medidor sin destruir

6

Insert()

Inserta un control secundario en una posición específica

7

Remove()

Saca a un niño del medidor y lo destruye

Ejemplo

En el siguiente código, se aplica un medidor de cuadro vertical a un objeto de panel que se coloca dentro de la ventana wxFrame.

p = wx.Panel(self) 
vbox = wx.wx.BoxSizer(wx.VERTICAL)

La primera fila del cuadro muestra una etiqueta (objeto wx.StaticText) en el centro con un borde de 20 píxeles alrededor.

l1 = wx.StaticText(p,label = "Enter a number",style = wx.ALIGN_CENTRE ) 
vbox.Add(l1,0,  wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 20)

En la segunda fila, se muestra un objeto wx.Button. Debido a la bandera wx.EXPAND, ocupa todo el ancho de la ventana.

b1 = wx.Button(p, label = "Btn1") 
vbox.Add(b1,0, wx.EXPAND)

La siguiente fila también contiene un botón. No se agrega con el indicador EXPAND. En cambio, debido a ALIGN_CENTER_HORIZONTAL, el botón con el tamaño predeterminado aparece en el centro horizontalmente.

b2 = wx.Button(p, label = "Btn2") 
vbox.Add(b2,0,wx.ALIGN_CENTER_HORIZONTAL)

En la siguiente fila, se agrega un objeto TextCtrl con el parámetro de proporción establecido en 1 y el indicador EXPAND establecido. Como resultado, es más alto en tamaño.

t = wx.TextCtrl(p) 
vbox.Add(t,1,wx.EXPAND,10)

La última fila contiene un objeto medidor horizontal, que a su vez tiene una etiqueta y un botón separados por un espacio estirable.

hbox = wx.BoxSizer(wx.HORIZONTAL) 
l2 = wx.StaticText(p,label = "Label2", style = wx.ALIGN_CENTRE) 
hbox.Add(l2,0,wx.EXPAND) 

b3 = wx.Button(p,label = "Btn3") 
hbox.AddStretchSpacer(1) 
hbox.Add(b3,0,wx.ALIGN_LEFT,20) 
vbox.Add(hbox,1,wx.ALL|wx.EXPAND)

Por último, el medidor de cuadro vertical se aplica al objeto wx.Panel.

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

import wx 
 
class Example(wx.Frame): 
   
   def __init__(self, parent, title): 
      super(Example, self).__init__(parent, title = title, size = (200,300)) 
             
      self.InitUI() 
      self.Centre() 
      self.Show()
		
   def InitUI(self): 
      p = wx.Panel(self) 
      vbox = wx.wx.BoxSizer(wx.VERTICAL) 
      l1 = wx.StaticText(p,label = "Enter a number",style = wx.ALIGN_CENTRE ) 
      vbox.Add(l1,0,  wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 20) 
      b1 = wx.Button(p, label = "Btn1") 
      vbox.Add(b1,0,wx.EXPAND) 
          
      b2 = wx.Button(p, label = "Btn2") 
      vbox.Add(b2,0,wx.ALIGN_CENTER_HORIZONTAL) 
      t = wx.TextCtrl(p) 
      vbox.Add(t,1,wx.EXPAND,10) 
      hbox = wx.BoxSizer(wx.HORIZONTAL) 
      l2 = wx.StaticText(p,label = "Label2", style = wx.ALIGN_CENTRE) 
		
      hbox.Add(l2,0,wx.EXPAND) 
      b3 = wx.Button(p,label = "Btn3") 
      hbox.AddStretchSpacer(1) 
      hbox.Add(b3,0,wx.ALIGN_LEFT,20) 
      vbox.Add(hbox,1,wx.ALL|wx.EXPAND) 
      p.SetSizer(vbox) 
          
app = wx.App() 
Example(None, title = 'BoxSizer demo') 
app.MainLoop()

El código anterior produce la siguiente salida: