Учебники

wxPython — Управление раскладкой

GUI-виджет можно разместить внутри окна контейнера, указав его абсолютные координаты, измеренные в пикселях. Координаты относятся к размерам окна, определяемым аргументом размера его конструктора. Положение виджета внутри окна определяется аргументом pos его конструктора.

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()

Это абсолютное позиционирование, однако, не подходит по следующим причинам:

  • Положение виджета не изменяется даже при изменении размера окна.

  • Внешний вид может быть неодинаковым на разных устройствах отображения с разным разрешением.

  • Модификация в макете сложна, так как может потребоваться перепроектирование всей формы.

Положение виджета не изменяется даже при изменении размера окна.

Внешний вид может быть неодинаковым на разных устройствах отображения с разным разрешением.

Модификация в макете сложна, так как может потребоваться перепроектирование всей формы.

API wxPython предоставляет классы Layout для более элегантного управления позиционированием виджетов внутри контейнера. Преимущества менеджеров по расположению над абсолютным позиционированием:

  • Виджеты внутри окна автоматически изменяются.
  • Обеспечивает равномерное отображение на устройствах отображения с различными разрешениями.
  • Динамическое добавление или удаление виджетов возможно без изменения дизайна.

Менеджер раскладки называется Sizer в wxPython. Wx.Sizer является базовым классом для всех подклассов sizer. Давайте обсудим некоторые важные параметры, такие как wx.BoxSizer, wx.StaticBoxSizer, wx.GridSizer, wx.FlexGridSizer и wx.GridBagSizer.

Этот измеритель позволяет расположить элементы управления в ряд или столбец. Макет BoxSizer определяется его аргументом ориентации (wxVERTICAL или wxHORIZONTAL).

Как следует из названия, объект GridSizer представляет двумерную сетку. Элементы управления добавляются в слот сетки в порядке слева направо и сверху вниз.

Этот сортировщик также имеет двумерную сетку. Тем не менее, он обеспечивает немного больше гибкости при размещении элементов управления в ячейках.

GridBagSizer — универсальный классификатор. Он предлагает больше улучшений, чем FlexiGridSizer. Дочерний виджет может быть добавлен в определенную ячейку в сетке.

StaticBoxSizer помещает блок размеров в статический блок. Он обеспечивает рамку вокруг рамки и метку сверху.