Сайзеры решают все проблемы абсолютного позиционирования, и wxPython имеет сайзеры
BoxSizer
,
StaticBoxSizer
,
GridSizer
,
FlexGridSizer
,
GridBagSizer
, и
BoxSizer
.
Компоновка BoxSizer позволяет размещать несколько виджетов в строке или столбце.
И мы можем добавлять один сайзер в другой. Таким образом мы можем создавать очень сложные макеты.
Ориентация компоновки может быть вертикальная или горизонтальная.
И добавление виджетов в BoxSizer осуществляется с помощью метода Add.
Параметр пропорции определяет соотношение изменения виджетов в заданной ориентации.
Предположим, у нас есть три элемента с пропорциями 0, 1 и 2.
И они добавлены в горизонтальный BoxSizer.
Элемент с пропорцией 0 вообще не изменится.
Элемент с пропорцией 2 изменится в два раза больше, чем элемент с пропорцией 1 по горизонтали.
С помощью параметра flag вы можете дополнительно настроить поведение виджетов в BoxSizer.
Здесь мы можем контролировать границу border между виджетами, добавляя промежуток между виджетами в пикселях.
Чтобы применить границу, нам нужно определить стороны, где будет использоваться граница.
И мы можем комбинировать стороны, например LEFT | BOTTOM.
И наконец сайзер задается для контейнера с помощью метода setSizer.
Компоновка GridSizer размещает виджеты в двухмерной таблице.
И каждая ячейка в этой таблице имеет одинаковый размер.
Здесь в конструкторе мы указываем количество строк и столбцов в таблице, а также вертикальное и горизонтальное расстояние между ячейками.
Здесь мы использовали метод Add. И виджеты размещаются внутри таблицы в том порядке, в котором они добавляются. Сначала заполняется первая строка, затем вторая строка и т. д.
В методе Add мы используем параметры flag и border, которые определяют ширину границы ячейки.
Компоновка
FlexGridSizer
похожа на
GridSizer
.
Она также размещает свои виджеты в двухмерной таблице.
Но в то время как ячейки GridSizer имеют одинаковый размер, в FlexGridSizer строки и столбцы не обязательно имеют одинаковую высоту или ширину.
Поэтому эта компоновка обеспечивает немного больше гибкости при размещении элементов в ячейках.
Здесь размер каждой ячейки не одинаков, как в GridSizer.
И ширина и высота ячеек в одном столбце или строке может быть увеличена с помощью методов AddGrowableRow и AddGrowableCol.
Первый параметр здесь индекс строки или индекс столбца, а второй параметр — это доля прироста.
Компоновка GridBagSizer — это самая гибкая компоновка в wxPython.
Эта компоновка позволяет явно позиционировать элементы.
Элементы также могут занимать более одной строки или столбца.
И мы добавляем элементы с помощью метода Add.
Здесь параметр pos указывает положение в сетке.
В верхней левой ячейке pos (0, 0).
Параметр span — это диапазон элемента, например span (3, 2) — это виджет занимает 3 строки и 2 столбца.
Параметры флаг и граница обсуждались в BoxSizer.
И ширина и высота ячеек в одном столбце или строке может быть увеличена с помощью методов AddGrowableRow и AddGrowableCol.
Таким образом, GridBagSizer — это универсальная компоновка.
Здесь дочерний виджет можно добавить в определенную ячейку сетки.
Кроме того, дочерний виджет может занимать более одной ячейки по горизонтали или вертикали.
Диалоговые окна являются неотъемлемой частью большинства приложений с графическим интерфейсом.
Диалог используется для ввода данных, изменения данных, изменения настроек приложения и т. д.
И мы можем использовать предопределенные диалоги, такие как окна сообщений, диалоги шрифтов или цветов, или создавать свои собственные диалоги.
Окно сообщения предоставляет пользователю краткую информацию.
И класс MessageBox показывает небольшое диалоговое окно.
Здесь мы предоставляем три параметра: текстовое сообщение, заголовок сообщения и флаги. Флаги используются для отображения различных кнопок и значков.
В нашем случае мы показываем кнопку ОК и значок информации.
Создать диалоговое окно сообщения просто.
Мы устанавливаем диалог как окно верхнего уровня, указав None в качестве родителя.
Чтобы отобразить диалог на экране, мы вызываем метод ShowModal.
Чтобы создать диалоговое окно about, мы должны создать два объекта — wx.adv.AboutDialogInfo и wx.adv.AboutBox.
Для создания собственного диалога, мы должны создать класс, который наследует от виджета wx.Dialog.
Мы создаем экземпляр этого класса, а затем мы вызываем метод ShowModal.
Позже мы должны уничтожить наш диалог с помощью метода Destroy.
Теперь давайте пройдемся по виджетам библиотеки wxPython.
Button — это простой виджет, который содержит текстовую строку и используется для запуска действия.
В этом примере мы создаем кнопку «Закрыть», которая при нажатии завершает работу приложения.
В конструкторе виджета мы указываем метку для кнопки и позицию на панели.
Методом Bind мы связываем событие с методом, и событие запускается, когда мы нажимаем на кнопку.
Здесь мы указываем обработчик для этого события, в котором мы завершаем приложение с помощью метода Close.
Виджет ToggleButton — это кнопка, которая имеет два состояния: нажата и не нажата.
И вы переключаетесь между этими двумя состояниями, нажимая на кнопку.
В этом примере мы меняем цвет панели, нажимая на кнопку.
Здесь создается виджет ToggleButton и панель, цвет которой мы будем изменять с помощью кнопки-переключателя.
Обработчик события Toggle вызывается, когда мы нажимаем кнопку.
В этом методе мы устанавливаем цвет фона панели в зависимости от того нажата кнопка или нет.