wxPython - BoxSizer

Este dimensionador permite que os controles sejam organizados em linhas ou colunas. BoxSizer’s layout é determinado por seu argumento de orientação (wxVERTICAL ou wxHORIZONTAL).

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

O método Add () (herdado de wxSizer) o anexa à próxima linha / coluna do sizer.

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

O parâmetro de proporção controla como o controle muda seu tamanho em resposta às dimensões do contêiner. A combinação de vários parâmetros de sinalizador decide a aparência do controle no dimensionador. A seguir estão algumas das bandeiras -

Bandeiras de alinhamento

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

Bandeiras de fronteira

wx.TOP
wx.BOTTOM
wx.LEFT
wx.RIGHT
wx.ALL

Sinalizadores de comportamento

SN Sinalizadores de comportamento e descrição
1

wx.EXPAND

O item se expandirá para preencher o espaço fornecido a ele (wx.GROW é o mesmo)

2

wx.SHAPED

Semelhante a EXPAND, mas mantém a proporção do item

3

wx.FIXED_MINSIZE

Não permite que o item fique menor que seu tamanho mínimo inicial

4

wx.RESERVE_SPACE_EVEN_IF_ HIDDEN

Não permite que o sizer recupere o espaço de um item quando ele está escondido

O parâmetro da borda é um inteiro, o espaço em pixels a ser deixado entre os controles. Por exemplo,

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

A seguir estão mais alguns métodos da classe wx.BoxSizer -

SN Métodos e Descrição
1

SetOrientation()

Define a orientação wxHORIZONTAL ou wxVERTICAL

2

AddSpacer()

Adiciona espaço não extensível

3

AddStretchSpacer()

Adiciona espaço extensível para que o redimensionamento da janela afete o tamanho do controle proporcionalmente

4

Clear()

Remove os filhos do sizer

5

Detach()

Remove um controle do sizer sem destruir

6

Insert()

Insere um controle filho em uma posição especificada

7

Remove()

Remove um filho do sizer e o destrói

Exemplo

No código a seguir, um dimensionador de caixa vertical é aplicado a um objeto de painel que é colocado dentro da janela wxFrame.

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

A primeira linha da caixa exibe um rótulo (objeto wx.StaticText) no centro com uma borda de 20 pixels ao redor.

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)

Na segunda linha, um objeto wx.Button é exibido. Por causa do sinalizador wx.EXPAND, ele ocupa toda a largura da janela.

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

A próxima linha também contém um botão. Não é adicionado com o sinalizador EXPAND. Em vez disso, por causa de ALIGN_CENTER_HORIZONTAL, o botão com o tamanho padrão aparece no centro horizontalmente.

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

Na próxima linha, um objeto TextCtrl com parâmetro de proporção definido como 1 e sinalizador EXPAND definido é adicionado. Como resultado, é mais alto em tamanho.

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

A última linha contém um objeto sizer horizontal, que por sua vez tem um rótulo e um botão separados por um espaço extensível.

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, o dimensionador de caixa vertical é aplicado ao objeto wx.Panel.

A seguir está o 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()

O código acima produz a seguinte saída -