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 помещает блок размеров в статический блок. Он обеспечивает рамку вокруг рамки и метку сверху.