как создать меню в питоне
Создание меню и подменю
Давайте для начала создадим вот такое простое меню. На уровне языка Python это выглядит так:
Смотрите, мы сначала создаем экземпляр класса MenuBar и экземпляр класса Menu. Далее, указываем, что создаем пункт во вкладке fileMenu со строкой «Выход». Параметр ID_EXIT – это id нашего пункта. Оно выбрано как стандартное и, по идее, должно добавлять соответствующую иконку и комбинацию клавиш Ctrl+Q (но это не всегда срабатывает). В конце идет описание этого пункта, которое можно позже вывести, например, в статусную строку. Далее, мы добавляем созданный пункт во вкладку fileMenu с помощью метода Append и на панели menubar размещаем эту вкладку, также вызывая метод Append класса MenuBar. В конце размещаем панель меню в нашем окне.
Запустим программу и видим ожидаемый функционал. И смотрите, если сейчас нажать комбинацию клавиш
то наша вкладка «File» будет автоматически выбрана. Так получилось благодаря амперсанду перед символом F. Если мы его поставим, например, перед буквой «i», то вкладка откроется при нажатии
И так далее. Вот в этом смысл этого амперсанда.
Конечно, если сейчас выбрать пункт меню, то ничего не произойдет, т.к. мы еще не назначили ему обработчик. Но, прежде чем мы это сделаем, отметим следующее. Для удобства вот эти две строчки:
можно объединить в одну:
Результат будет абсолютно таким же. В дальнейшем мы будем создавать пункты именно так, если не понадобится первый способ.
Теперь свяжем данный пункт с обработчиком. Например, пусть при его выборе вызывается метод:
Обратите внимание, у этого метода следует прописывать обязательный параметр event, который будет ссылаться на объект события. Через него можно получать дополнительную информацию о том, что произошло.
Само связывание делается с помощью специального метода Bind, который наследуется почти всеми классами wxPython. Его синтаксис следующий:
В нашем случае этот метод можно записать так:
Мы здесь указали тип события – EVT_MENU, далее, ссылка на метод onQuit, и, наконец, источник – наш пункт меню item. Все, теперь при запуске программы сработает метод onQuit и окно будет закрыто.
Добавим теперь нашему пункту дополнительный функционал. Во-первых, мы хотим, чтобы при комбинации клавиш
этот пункт автоматически вызывался и выполнялся связанный с ним обработчик. Назначить горячие клавиши очень просто, указав их через символ табуляции:
Далее, добавим нашему пункту изображение иконки. Вначале определим константу
которая будет связана с ним. И создадим пункт, используя класс MenuItem:
В данном случае это необходимо, т.к. перед его добавление во вкладку мы присвоим ему иконку:
Запускаем программу и видим такой эффект:
Разумеется, картинка exit16.png должна располагаться в том же каталоге, что и запускаемый файл с программой на питоне. Размеры картинки должны соответствовать нашему пункту. Если ее взять больше:
то это может выглядеть не так эстетично.
Кстати, используя нашу собственную константу APP_EXIT в качестве id пункта, в дальнейшем, мы можем связывать через нее обработчик в методе Bind:
Такой подход более предпочтителен, чем использование ссылок, т.к. их легко изменить или многократно использовать для разных пунктов. А вот id остается неизменным.
Подменю и сепараторы
Давайте расширим нашу вкладку, добавим на нее еще несколько стандартных пунктов, например, такие:
И смотрите, нам бы здесь хотелось визуально отделить эти пункты от последнего. Как раз это можно сделать с помощью специального пункта, который называется separator. Он добавляется специальным методом:
Теперь наша вкладка выглядит привычнее.
Следующим шагом добавим подменю. Создадим еще одну вкладку:
пропишем туда вот такие пункты:
и добавим на вкладку fileMenu:
Запускаем программу и видим такой результат:
Типы пунктов меню
С первыми двумя мы уже познакомились. Для демонстрации двух других создадим еще одну вкладку:
Добавим туда следующие строчки:
Добавим эту вкладку на панель меню:
Запустим программу и увидим вот такой эффект:
Смотрите, первую строчку можно отмечать флажком, а последние две только перебирать: либо RGB, либо sRGB.
Давайте теперь посмотрим как все это можно отследить в обработчиках этих событий. Пропишем в начале вот такие константы:
Укажем их при создании строчек меню:
И, далее, повесим обработчики:
Объявим два метода:
Смотрите, мы здесь используем метод IsChecked(), чтобы определить: выбран ли данный пункт. И в соответствии с этим выводим в консоль сообщения. Запустим программу и убедимся, что все работает корректно.
Видео по теме
wxPython #1: обзор модулей для GUI и порядок установки wxPython
wxPython #2: общая структура интерфейса
wxPython #4: контекстное меню и панель инструментов (toolbar)
wxPython #5: схемы (layout) размещения виджетов, BoxSizer
wxPython #8: примеры событий, назначение id виджетам
wxPython #9: стандартные диалоговые окна
wxPython #10: пользовательские диалоговые окна, класс Dialog
wxPython #14: графические примитивы, система координат, единицы измерений
wxPython #15: регионы (wx.Region) и операции с ними
wxPython #17: демонстрация программы wxFormBuilder
© 2021 Частичное или полное копирование информации с данного сайта для распространения на других ресурсах, в том числе и бумажных, строго запрещено. Все тексты и изображения являются собственностью сайта
Меню и панели инструментов в PyQt5 [Урок №3]
В этой части руководства PyQt5, мы будем создавать меню и панели инструментов. Меню – это группа команд, располагающаяся ниже строки заголовка программы. Панель инструментов содержит кнопки с несколькими распространенными командами в приложении.
Основное окно
Класс QMainWindow предоставляет главное окно приложения. Он позволяет создать классический каркас приложения со строкой состояния, панелями инструментов и меню.
Строка состояния
Строка состояния – это виджет, который используется для отображения сведений о состоянии.
Строку состояния создают с помощью виджета QMainWindow.
Чтобы получить строку состояния, мы вызываем метод statusBar() класса QtGui.QMainWindow. Первый вызов метода создаёт строку состояния. Последующие вызовы возвращают объект строки состояния. showMessage() отображает сообщение в строке состояния.
Меню программы
Строка меню – это распространенная часть приложений с графическим интерфейсом (GUI).
В примере выше, мы создаём строку меню с одним набором команд. Этот набор команд будет содержать одно действие, завершающее приложение при его выборе. Строка состояния тоже создаётся. Действие доступно с горячей клавишей Ctrl+Q.
QAction – это абстракция для действий, выполняемых из меню, панелью инструментов или с использованием горячей клавишей. В приведённых выше трёх строках, мы создаём действие с определённой иконкой и меткой «Exit». Кроме того, для этого действия определена горячая клавиша. Третья строка создаёт подсказку, которая показывается в строке состояния, когда мы наводим курсор мыши на пункт меню.
Когда мы выбираем конкретное действие, срабатывает инициирующий сигнал. Сигнал присоединяют к методу quit() виджета QApplication. Это завершает приложение.
Метод menuBar() создаёт строку меню. Мы создаём меню «File» и добавляем в него действие выхода из приложения.
Панель инструментов
Все команды из меню, которые мы можем использовать в приложении. Панели инструментов предоставляют быстрый доступ к большинству часто используемых команд.
В вышеприведённом примере, мы создаём простую панель инструментов. Она имеет один инструмент, действие выхода, которое завершает приложение, будучи инициированным.
В аналогичном примере как с созданием меню выше, мы создаём объект действия. Объект имеет метку, иконку и горячую клавишу. Метод quit() из QtGui.QMainWindow присоединяется к инициирующему сигналу.
Здесь мы создаём панель инструментов и подключаем объект действия к ней.
Рисунок: Панель инструментов
Совместное размещение
В последнем примере этой части, мы создадим меню, панель инструментов и строку состояния. Мы также создадим центральный виджет.
Этот пример кода создаёт каркас классического графического приложения состоящей из меню, панелью инструментов и строкой состояния.
Здесь мы создаём виджет редактирования текста. Мы устанавливаем его так, чтобы он был центральным виджетом QMainWindow. Центральный виджет займёт всё оставшееся пространство.
Рисунок: Главное окно
В этой части руководства PyQt5, мы работали с меню, панелями управления, строкой состояния и главным окном приложения.
The goal of this widget is to allow us to create all kinds of menus that can be used by our applications. The core functionality provides ways to create three menu types: pop-up, toplevel and pull-down.
It is also possible to use other extended widgets to implement new types of menus, such as the OptionMenu widget, which implements a special type that generates a pop-up list of items within a selection.
Syntax
Here is the simple syntax to create this widget −
Parameters
master − This represents the parent window.
options − Here is the list of most commonly used options for this widget. These options can be used as key-value pairs separated by commas.
The background color that will appear on a choice when it is under the mouse.
Specifies the width of a border drawn around a choice when it is under the mouse. Default is 1 pixel.
The foreground color that will appear on a choice when it is under the mouse.
The background color for choices not under the mouse.
The width of the border around all the choices. Default is 1.
The cursor that appears when the mouse is over the choices, but only when the menu has been torn off.
The color of the text for items whose state is DISABLED.
The default font for textual choices.
The foreground color used for choices not under the mouse.
You can set this option to a procedure, and that procedure will be called every time someone brings up this menu.
The default 3-D effect for menus is relief=RAISED.
To display an image on this menubutton.
Specifies the color displayed in checkbuttons and radiobuttons when they are selected.
Normally, a menu can be torn off, the first position (position 0) in the list of choices is occupied by the tear-off element, and the additional choices are added starting at position 1. If you set tearoff=0, the menu will not have a tear-off feature, and choices will be added starting at position 0.
Normally, the title of a tear-off menu window will be the same as the text of the menubutton or cascade that lead to this menu. If you want to change the title of that window, set the title option to that string.
Methods
These methods are available on Menu objects −
Sr.No. | Option & Description |
---|---|
1 |