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.