pos_hint — x, center_x, right, y, center_y и top используются для выравнивания виджета по краям или центрирования независимо от размера окна.
Таким образом, эта компоновка позволяет устанавливать относительные координаты для дочерних виджетов.
Если вам нужно абсолютное позиционирование, используйте FloatLayout.
И в RelativeLayout необходимо указать размер и положение каждого дочернего виджета.
Компоновка PageLayout работает иначе, чем другие макеты.
Эта компоновка позволяет перелистывать страницы, используя свои границы.
Идея состоит в том, что все страницы сложены друг над другом, и мы видим ту страницу, которая находится сверху.
Таким образом класс PageLayout используется для создания многостраничного интерфейса таким образом, чтобы можно было легко переключаться с одной страницы на другую с помощью перелистывания.
wxPython
Библиотека WxPython — это питон обёртка библиотеки C++ графического интерфейса wxWidgets.
Оригинальная библиотека wxWidgets, написанная на C ++, — это огромная библиотека классов.
И классы графического интерфейса пользователя из этой библиотеки переносятся на Python с помощью модуля wxPython, который пытается максимально точно отразить исходную библиотеку wxWidgets.
Для начала работы с библиотекой WxPython, создадим проект в
PyCharm
и в окне терминала наберем команду pip install — U wxPython для установки библиотеки.
Далее создадим файл питона и наберем простой код.
Здесь мы импортируем модуль wx.
Далее мы определяем объект класса Application.
И создаем окно верхнего уровня как объект класса Frame, заголовок и размер которого задаются в конструкторе.
Frame — это наиболее часто используемое окно верхнего уровня, размер и положение которого может быть изменено пользователем.
Оно имеет строку заголовка и кнопки управления.
И при необходимости можно добавить другие компоненты, такие как строка меню, панель инструментов и строка состояния.
Далее мы помещаем объект Panel в Frame.
И добавляем объект StaticText для отображения «Hello World» внутри окна.
И наконец мы активируем окно фрейма методом show и входим в основной цикл событий объекта Application.
Для создания исполняемого файла приложения, можно воспользоваться инструментом PyInstaller.
Установив который с помощью команды pip, можно набрать команду pyinstaller в терминале и получить исполняемый файл.
Фрейм — это окно, размер и положение которого может быть изменено пользователем.
Это окно имеет границы и строку заголовка и может дополнительно содержать строку меню, панель инструментов и строку состояния.
И фрейм может содержать любое другое окно, кроме фрейма или диалога.
Строку состояния, панель инструментов и меню можно добавить с помощью функций setStatusBar, SetToolBar и SetMenuBar.
В меню есть пункты меню.
Пункты меню — это команды, которые выполняют определенное действие внутри приложения.
И в меню также могут быть подменю, в которых есть свои собственные пункты меню.
Для создания меню используются классы MenuBar, Menu и MenuItem.
Здесь мы добавляем пункт меню в объект меню методом Append.
Первый параметр здесь — это идентификатор пункта меню.
Второй параметр — это название пункта меню.
Третий параметр определяет строку, которая отображается в строке состояния при выборе пункта меню.
Метод Append возвращает созданный пункт меню.
Эта ссылка используется для привязки события.
Здесь мы привязываем пункт меню к методу OnQuit. Этот метод закрывает приложение.
В каждом меню также может быть подменю.
Таким образом, мы можем объединять похожие команды в группы.
В меню мы можем разделять команды разделителем с помощью метода AppendSeparator. Это простая линия.
Также есть три вида пунктов меню. Это обычное меню, это флажок и это радиоэлемент.
Если мы хотим добавить флажок, мы устанавливаем параметр kind как ITEM_CHECK.
Контекстное меню — это список команд, который появляется в некотором контексте.
Например, когда мы щелкаем правой кнопкой мыши на элементе окна, мы видим контекстное меню.
И контекстные меню иногда называют всплывающими меню.
В этом примере мы создаем контекстное меню для главного окна.
В нем два элемента. Пункт меню создается и добавляется к контекстному меню.
И к этому пункту меню может быть привязан обработчик событий.
Если мы щелкнем правой кнопкой мыши на фрейме, мы вызываем метод OnRightDown.
Для этой привязки мы используем событие wx.EVT_RIGHT_DOWN.
В методе OnRightDown мы вызываем метод PopupMenu.
Этот метод показывает контекстное меню.
И контекстные меню появляются в точке наведения курсора мыши.
В меню, которое мы уже рассмотрели, группируются все команды, которые мы можем использовать в приложении.
Панели инструментов обеспечивают быстрый доступ к наиболее часто используемым командам.
Чтобы создать панель инструментов, мы вызываем метод CreateToolBar виджета фрейма.
По умолчанию панель инструментов горизонтальна, не имеет границ и отображает значки.
Чтобы создать элемент панели инструментов, мы вызываем метод AddTool.
Первый параметр, это идентификатор элемента.
Второй параметр — это метка элемента, третий — изображение элемента.
И обратите внимание, что метка не отображается, потому что стиль по умолчанию показывает только значки.
Также мы можем добавить группу RadioTool, из которой можно выбрать только один элемент.
После того, как мы разместили наши элементы на панели инструментов, мы вызываем метод Realize.
Кнопки инструментов генерируют событие EVT_TOOL, с помощью которого мы можем привязать обработчик элемента панели инструментов.
Теперь, давайте поговорим о компоновках в wxPython, с помощью которых виджеты размещаются внутри виджетов-контейнеров.
В wxPython можно размещать виджеты, используя абсолютное позиционирование или используя сайзеры.
При абсолютном позиционировании мы указываем положение и размер каждого виджета в пикселях.
И абсолютное позиционирование имеет ряд недостатков, а именно — размер и положение виджета не меняются, если мы изменяем размер окна, также приложения выглядят по-разному на разных платформах и изменение шрифтов в приложении может испортить компоновку.
Поэтому чаще всего в реальных программах используются сайзеры.
Здесь в этом примере мы размещаем три метки методом SetPosition используя абсолютное позиционирование.
Сайзеры решают все проблемы абсолютного позиционирования, и wxPython имеет сайзеры
BoxSizer
,
StaticBoxSizer
,
GridSizer
,
FlexGridSizer
,
GridBagSizer
, и
BoxSizer
.
Компоновка BoxSizer позволяет размещать несколько виджетов в строке или столбце.
И мы можем добавлять один сайзер в другой. Таким образом мы можем создавать очень сложные макеты.
Ориентация компоновки может быть вертикальная или горизонтальная.
И добавление виджетов