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 -