wxPython - Gerenciamento de Layout
Um widget GUI pode ser colocado dentro da janela do contêiner especificando suas coordenadas absolutas medidas em pixels. As coordenadas são relativas às dimensões da janela definidas pelo argumento de tamanho de seu construtor. A posição do widget dentro da janela é definida porpos argumento de seu construtor.
import wx
app = wx.App()
window = wx.Frame(None, title = "wxPython Frame", size = (300,200))
panel = wx.Panel(window)
label = wx.StaticText(panel, label = "Hello World", pos = (100,50))
window.Show(True)
app.MainLoop()
este Absolute Positioning no entanto, não é adequado pelos seguintes motivos -
A posição do widget não muda, mesmo se a janela for redimensionada.
A aparência pode não ser uniforme em dispositivos de exibição diferentes com resoluções diferentes.
A modificação no layout é difícil, pois pode ser necessário redesenhar todo o formulário.
A API wxPython fornece classes de layout para gerenciamento mais elegante do posicionamento de widgets dentro do contêiner. As vantagens dos gerenciadores de layout sobre o posicionamento absoluto são -
- Os widgets dentro da janela são redimensionados automaticamente.
- Garante aparência uniforme em dispositivos de exibição com diferentes resoluções.
- Adicionar ou remover widgets dinamicamente é possível sem ter que redesenhar.
O gerenciador de layout é chamado de Sizer em wxPython. Wx.Sizer é a classe base para todas as subclasses de sizer. Vamos discutir alguns dos dimensionadores importantes, como wx.BoxSizer, wx.StaticBoxSizer, wx.GridSizer, wx.FlexGridSizer e wx.GridBagSizer.
SN | Medidores e descrição |
---|---|
1 | BoxSizer Este dimensionador permite que os controles sejam organizados em linhas ou colunas. O layout do BoxSizer é determinado por seu argumento de orientação (wxVERTICAL ou wxHORIZONTAL). |
2 | GridSizer Como o nome sugere, um objeto GridSizer apresenta uma grade bidimensional. Os controles são adicionados no slot da grade na ordem da esquerda para a direita e de cima para baixo. |
3 | FlexiGridSizer Este dimensionador também possui uma grade bidimensional. No entanto, oferece um pouco mais de flexibilidade no layout dos controles nas células. |
4 | GridBagSizer GridBagSizer é um dimensionador versátil. Ele oferece mais melhorias do que FlexiGridSizer. O widget filho pode ser adicionado a uma célula específica da grade. |
5 | StaticBoxSizer Um StaticBoxSizer coloca um dimensionador de caixa em uma caixa estática. Ele fornece uma borda ao redor da caixa junto com uma etiqueta na parte superior. |