Читаем Создание настольных Python приложений с графическим интерфейсом пользователя полностью

Чтобы создать элемент панели инструментов, мы вызываем метод AddTool.

Первый параметр, это идентификатор элемента.

Второй параметр — это метка элемента, третий — изображение элемента.

И обратите внимание, что метка не отображается, потому что стиль по умолчанию показывает только значки.

Также мы можем добавить группу RadioTool, из которой можно выбрать только один элемент.

После того, как мы разместили наши элементы на панели инструментов, мы вызываем метод Realize.

Кнопки инструментов генерируют событие EVT_TOOL, с помощью которого мы можем привязать обработчик элемента панели инструментов.

Теперь, давайте поговорим о компоновках в wxPython, с помощью которых виджеты размещаются внутри виджетов-контейнеров.

В wxPython можно размещать виджеты, используя абсолютное позиционирование или используя сайзеры.

При абсолютном позиционировании мы указываем положение и размер каждого виджета в пикселях.

И абсолютное позиционирование имеет ряд недостатков, а именно — размер и положение виджета не меняются, если мы изменяем размер окна, также приложения выглядят по-разному на разных платформах и изменение шрифтов в приложении может испортить компоновку.

Поэтому чаще всего в реальных программах используются сайзеры.

Здесь в этом примере мы размещаем три метки методом SetPosition используя абсолютное позиционирование.

Сайзеры решают все проблемы абсолютного позиционирования, и 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 показывает небольшое диалоговое окно.

Перейти на страницу:

Похожие книги