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: