python как сделать меню выбора
Создание меню / tkinter 10
Сложные графические интерфейсы обычно используют строки меню для организации действий и навигации по приложению. Этот подход также применяется для группировки тесно связанных операций. Например, в большинстве текстовых редакторов есть пункт «Файл».
Tkinter поддерживает такие меню, которые отображаются и ощущаются в соответствии с окружением конкретной операционной системы. Это позволяет не симулировать все с помощью фреймов, ведь из-за этого пропадет возможность пользоваться встроенными кроссплатформенными особенностями Tkinter.
Добавим меню в корневое окно со вложенным выпадающим меню. В Windows 10 это отображается следующим образом:
Если запустить это скрипт, то вы увидите, что элемент Файл показывает дополнительное меню, а с помощью кнопки Выйти приложение можно закрыть.
Как работает создание верхнего меню
Сначала создаем экземпляр каждого меню, указывая родительский контейнер. Значение 1 у параметра tearoff указывает на то, что меню можно открепить с помощью пунктирной линии на границе. Это поведение не характерно для верхнего меню, но если его нужно отключить, то стоит задать значение 0 для этого параметра:
Элементы меню организованы в том же порядке, в котором они добавляются с помощью методов: add_command , app_separator и add_cascade :
Использование переменных в меню
Помимо вызова команд и вложенных встроенных меню также можно подключать переменные Tkinter к элементам меню.
Добавим кнопку-флажок и три переключателя в подменю «Опции», разделив их между собой. Внутри будет две переменных Tkinter, которые сохранят выбранные значения так, что их можно будет получить в других методах приложения:
Будем отслеживать изменения переменной так, чтобы можно было выводить значения в консоли во время работы приложения.
Как работает создание переменных в меню
Стоит запомнить, что параметры onvalue и offvalue должны совпадать с типами переменных Tkinter как и в случае с виджетами RadioButton и Checkbutton :
Отображение контекстных меню
Меню Tkinter не обязательно должны быть расположены в строке меню. Их можно размещать в любом месте. Такие меню называются контекстными, и обычно они отображаются при нажатии правой кнопкой по элементу.
Контекстные меню широко распространены в приложениях с графическим интерфейсом. Например, файловые менеджеры позволяют показывать все доступные операции для выбранного файла так, что для пользователей это будет ощущаться интуитивно.
Создадим контекстное меню для виджета Text, которое будет отображать некоторые распространенные действия в редакторах текста: Вырезать, Копировать, Вставить и Удалить:
Все команды в элементах меню вызывают метод, использующий текст для получения текущего выделения или позиции для вставки:
Меню, подменю и панель инструментов в Tkinter
В этой части обучения Tkinter мы поработаем с меню и панелями инструментов. Меню – одна из наиболее заметных и используемых частей графического интерфейса приложений.
Содержание курса
Содержание статьи
Фактически, это группа команд, которая объединена в одно меню. В консольных приложениях нам нужно запоминать большое количество тайных команд. Здесь же все команды объединены в удобные группы и расположены на видном месте.
Существуют определенные стандарты, которые позволяют пользователям быстрее осваивать как работает новое приложение. Меню объединяют группы команд, которые мы можем использовать для управления приложением. Панели инструментов дают нам быстрый доступ к тем командам, которые мы используем чаще всего.
Создание простого меню в Tkinter
Первый пример создает простое меню.
Наш пример показывает меню с одним элементом. Нажимая на «Выход» из нашего меню, мы закрываем приложение.
Здесь мы создаем панель меню. Для этого мы используем виджет Menu, который настраиваем для отображения в качестве меню для корневого окна.
Мы создаем объект меню для секции «Файл». Меню – это выпадающее окно, содержащее различные команды.
Мы добавляем новый элемент в меню «Файл». Эта команда будет вызывать метод onExit().
Меню «Файл» добавляется на панель меню при помощи метода add_cascade().
Добавление подменю для основное меню в Tkinter
Подменю – это меню, встроенные в другие элементы меню. В следующем примере мы продемонстрируем как добавить подменю в Tkinter.
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
В этом примере мы реализовали три опции в подменю от основного меню «Файл». Мы создали разделитель и горячие клавиши.
У нас есть подменю с тремя командами. Подменю – это обычное меню только иерархически она входит в другое меню.
Прикрепляем подменю к нашему основному меню «Файл», но не к самой панели меню. Так создается подменю. При помощи параметра underline мы можем установить горячие клавиши. Этот параметр подчеркивает символ, обозначающий горячую клавишу команды.
В нашем случае, это подчеркнутая первая буква из названия меню:
Позиции символов начинаются с нуля. Когда мы нажимаем на меню «Файл», появляется контекстное окно. В меню «Импортировать» также только один символ является подчеркнутым. Мы можем выбрать этот пункт меню при помощи курсора или сочетанием горячих клавиш Alt+I.
Разделитель – это горизонтальная линия, которая визуально разделяет элементы меню. Благодаря разделителям мы можем группировать элементы в меню.
Как создать всплывающее меню в Tkinter?
В следующем примере мы создадим всплывающее меню. Вызвать его можно в любой части рабочей области окна.
В нашем примере мы создадим всплывающее меню с двумя командами.
Для создания всплывающего меню используется обычный виджет Menu. Отключается свойство tearoff. Теперь у нас есть возможность показать меню в новом всплывающем окне.
Мы назначаем событие клика правой кнопки мышки методу showMenu(). Событие срабатывает тогда, когда мы нажимаем по рабочей области окна правой кнопкой мыши.
Метод showMenu() отображает всплывающее меню. Данное меню открывается по x и y координатам от расположения курсора мышки.
Панель инструментов в Tkinter
Меню объединяют команды, которые мы можем использовать в приложении. Панель инструментов позволяет нам получить быстрый доступ к наиболее популярным командам. В Tkinter нет виджета панели инструментов, нам придется его создать.
Код ниже использует иконку которую нужно будет сохранить рядом с файлом toolbar.py :
Нашей панелью инструментов будет рамка, в которой мы поместим кнопку.
Мы создали панель инструментов. Это обычная рамка. Мы создали границы панели инструментов видными.
Мы создали изображение и фотоизображение для панели инструментов.
Мы создали виджет кнопки выхода.
Панель инструментов – это рамка, а рамка – это виджет контейнера. Мы закрепляем кнопку у левого края и добавляем небольшой отступ в 2 пикселя.
Сама панель инструментов закреплена к верхней части главного окна и растянута горизонтально.
В этой части обучения Tkinter мы поработали с меню и панелями инструментов.
Являюсь администратором нескольких порталов по обучению языков программирования Python, Golang и Kotlin. В составе небольшой команды единомышленников, мы занимаемся популяризацией языков программирования на русскоязычную аудиторию. Большая часть статей была адаптирована нами на русский язык и распространяется бесплатно.
E-mail: vasile.buldumac@ati.utm.md
Образование
Universitatea Tehnică a Moldovei (utm.md)
Меню может содержать много элементов, причем эти элементы сами могут представлять меню и содержать другие элементы. В зависимости от того, какой тип элементов мы хотим добавить в меню, будет отличаться метод, используемый для их добавления. В частности, нам доступны следующие методы:
В tkinter экземпляр меню создается от класса Menu, далее его надо привязать к виджету, на котором оно будет расположено. Обычно таковым выступает главное окно приложения. Его опции menu присваивается экземпляр Menu через имя связанной с экземпляром переменной:
Если выполнить данный код, то никакого меню вы не увидите. Только тонкую полоску под заголовком окна, ведь ни одного пункта меню не было создано. Метод add_command() добавляет пункт меню:
В данном случае «Файл» и «Справка» – это команды. К ним можно добавить опцию command, связав тем самым с какой-либо функцией-обработчиком клика. Хотя такой вариант меню имеет право на существование, в большинстве приложений панель меню содержит выпадающие списки команд, а сами пункты на панели командами по сути не являются. Клик по ним приводит лишь к раскрытию соответствующего списка.
# Упражнения
Создайте визуально похожее меню программы блокнот или skype.
Реализуйте генерацию меню. Образец меню записан в виде массива:
В tkinter проблема решается созданием новых экземпляров Menu и подвязыванием их к главному меню с помощью метода add_cascade() :
Метод add_separator() добавляет линию разделитель в меню. Используется для визуального разделения групп команд.
# Взаимодействие с меню
В следующем примере мы создаем всплывающее меню. Всплывающее меню также называется контекстным меню. Это может быть показано в любом месте на клиентской области окна:
В нашем примере мы создаем всплывающее меню с двумя командами:
Результат выполнения может:
Здесь при клике на холсте правой кнопкой мыши в этой точке всплывает меню. При выборе пункта меню рисуется соответствующая фигура в этом же месте.
Python и PyQt: создание меню, панелей инструментов и строк состояния
Когда дело доходит до разработки приложений с графическим пользовательским интерфейсом (GUI) с помощью Python и PyQt, одними из самых полезных и универсальных графических элементов, которые вы когда-либо будете использовать, являются меню, панели инструментов и строки состояния.
Меню и панели инструментов могут придать вашим приложениям безупречный и профессиональный вид, предоставляя пользователям доступный набор опций, а строки состояния позволяют отображать соответствующую информацию о состоянии приложения.
В этом руководстве вы узнаете:
Кроме того, вы изучите некоторые передовые методы программирования, которые можно применять при создании меню, панелей инструментов и строк состояния с помощью Python и PyQt.
Создание меню и панелей инструментов в PyQt
Прежде чем идти дальше, вы создадите образец приложения PyQt, которое вы будете использовать в этом руководстве. В каждом разделе вы будете добавлять новые функции и возможности в этот образец приложения. Это означает, что у него будет строка меню, панель инструментов, строка состояния и центральный виджет.
Если вы запустите приложение из командной строки, вы увидите на экране следующее окно:
Вы создали приложение в стиле главного окна с помощью Python и PyQt. Вы будете использовать этот образец приложения для всех следующих примеров в этом руководстве.
Создание панелей меню
Теперь вернитесь к вашему образцу приложения и добавьте следующий метод в определение Window :
Это предпочтительный способ создания строки меню в PyQt. Здесь переменная menuBar будет содержать пустую строку меню, которая будет строкой меню вашего главного окна.
В приложении с графическим интерфейсом строка меню будет отображаться в разных положениях в зависимости от базовой операционной системы:
Если вы запустите образец приложения с этими новыми изменениями, вы не увидите строку меню, отображаемую в главном окне приложения. Это потому, что ваша строка меню все еще пуста. Чтобы увидеть строку меню в главном окне вашего приложения, вам нужно создать несколько меню. Вот что вы узнаете дальше.
Добавление меню в строку меню
Вот как вы можете добавить меню File, Edit и Help в строку меню вашего примера приложения:
Если вы запустите пример приложения, то увидите, что теперь у вас есть строка меню, подобная этой:
В строке меню приложения есть меню File, Edit и Help. Когда вы щелкаете по этим меню, они не показывают раскрывающийся список опций меню. Это потому, что вы еще не добавили пункты меню.
Наконец, обратите внимание, на символ амперсанда ( & ), который вы включаете в заголовок каждого меню, создает подчеркнутые буквы на отображении строки меню.
Создание панелей инструментов
Когда вы добавляете панель инструментов в приложение в главное окно, позиция по умолчанию находится в верхней части окна. Однако вы можете разместить панель инструментов в любой из следующих четырех областей панели инструментов:
Область панели инструментов | Положение в главном окне |
Qt.LeftToolBarArea | Левая сторона |
Qt.RightToolBarArea | Правая сторона |
Qt.TopToolBarArea | Верх |
Qt.BottomToolBarArea | Низ |
Есть три способа добавить панели инструментов в ваше главное окно приложения в PyQt:
Если вы используете один из двух последних вариантов, вам необходимо создать панель инструментов самостоятельно. Для этого можно использовать один из следующих конструкторов:
Теперь вы можете вернуться к вашему образцу приложения и добавить следующий метод в Window :
Теперь у вас есть две панели инструментов прямо под строкой меню и одна панель инструментов вдоль левой стороны окна. Каждая панель инструментов имеет двойную пунктирную линию. Когда вы наводите указатель мыши на пунктирные линии, указатель принимает вид руки. Если вы нажмете и удерживаете пунктирную линию, вы можете переместить панель инструментов в любое другое положение или область панели инструментов в окне.
Если вы щелкните правой кнопкой мыши панель инструментов, PyQt покажет контекстное меню, которое позволит вам скрывать и отображать существующие панели инструментов в соответствии с вашими потребностями.
Использование иконок и ресурсов в PyQt
Библиотека Qt включает систему ресурсов Qt, которая представляет собой удобный способ добавления двоичных файлов, таких как иконки, изображения, файлы перевода и другие ресурсы, в ваши приложения.
Если у вас есть псевдонимы, но по какой-то причине вы хотите вместо этого получить доступ к данному ресурсу по его пути, вам, возможно, придется удалить двоеточие из строки доступа, чтобы это работало правильно.
Чтобы использовать иконки в своих действиях, вам сначала нужно импортировать модуль ресурсов:
После того, как вы импортировали модуль, содержащий ваши ресурсы, вы можете использовать ресурсы в графическом интерфейсе вашего приложения.
Если вы запустите образец приложения с этим обновлением, вы получите следующий результат:
Создание действий для меню и панелей инструментов Python в PyQt
Также необходимо связать свои действия с каким-то функционалом. Другими словами, вам необходимо подключить их к функции или методу, которые вы хотите запустить при запуске действия. Это позволит вашему приложению выполнять операции в ответ на действия пользователя в графическом интерфейсе.
Действия довольно разносторонние. Они позволяют повторно использовать и синхронизировать одни и те же функции в параметрах меню, кнопках панели инструментов и сочетаниях клавиш. Это обеспечивает единообразное поведение во всем приложении.
Например, пользователи могут ожидать, что приложение выполнит то же действие, когда они щелкнут пункт меню Open…, нажатие кнопки Open на панели инструментов или нажмите Ctrl+O на своей клавиатуре.
QAction предоставляет абстракцию, которая позволяет отслеживать следующие элементы:
Во втором и третьем конструкторах text содержит текст, который будет отображать в пункте меню или на кнопке панели инструментов.
Текст действия по-разному отображается в параметрах меню и на кнопках панели инструментов. Например, текст &Open. отображается как Open… в пункте меню и как Open на кнопке панели инструментов.
Стиль | Дисплей кнопок |
Qt.ToolButtonIconOnly | Только значок |
Qt.ToolButtonTextOnly | Только текст |
Qt.ToolButtonTextBesideIcon | Текст рядом со значком |
Qt.ToolButtonTextUnderIcon | Текст под значком |
Qt.ToolButtonFollowStyle | Соответствует общему стилю базовой платформы |
Вот как вы можете создать некоторые действия для вашего примера приложения, используя различные конструкторы QAction :
Если вы добавляете действие в меню, оно становится опцией меню. Если вы добавляете действие на панель инструментов, то действие становится кнопкой панели инструментов. Это тема для следующих нескольких разделов.
Добавление параметров в меню Python в PyQt
В этом разделе вы узнаете, как использовать действия для заполнения меню параметрами меню.
Заполнение меню действиями
Чтобы заполнить меню параметрами меню, вы будете использовать действия. В меню действие представлено как горизонтальный параметр, который имеет как минимум описательный текст, например New, Open, Save и т.д. Параметры меню также могут отображать иконку с левой стороны и последовательность сочетаний клавиш, например Ctrl+S с правой стороны.
Порядок, в котором параметры отображаются в меню сверху вниз, соответствует порядку, в котором вы добавляете параметры в свой код.
Если вы запустите приложение, то вы увидите на экране следующее окно:
Если щелкнуть меню, приложение покажет раскрывающийся список с параметрами, которые вы видели ранее.
Создание подменю Python
Скажем, вам нужно добавить подменю в меню Edit вашего примера приложения. Ваше подменю будет содержать параметры для поиска и замены содержимого, поэтому вы назовете его Find and Replace. В этом подменю есть два варианта:
Вот как вы можете добавить это подменю в свой образец приложения:
Добавление параметров на панели инструментов в PyQt
Заполнение панелей инструментов действиями
Когда вы создаете панели инструментов, вы обычно сталкиваетесь с проблемой решения, какие параметры добавить к ним. Как правило, вы хотите добавить на свои панели инструментов только наиболее часто используемые действия.
Если вы вернетесь к своему образцу приложения, то вспомните, что добавили три панели инструментов:
На панели инструментов File вы можете добавить следующие параметры:
На панели инструментов Edit вы можете добавить следующие параметры:
Обычно, когда вы хотите добавить кнопки на панель инструментов, вы сначала выбираете иконки, которые хотите использовать на каждой кнопке. Это не обязательно, но это лучшая практика. После того, как вы выбрали иконки, вам нужно добавить их к соответствующим действиям.
Вот как вы можете добавить иконки к действиям вашего примера приложения:
Если вы сейчас запустите образец приложения, на экране появится следующее окно:
В примере приложения теперь отображаются две панели инструментов с несколькими кнопками на каждой. Ваши пользователи могут нажимать эти кнопки, чтобы получить быстрый доступ к наиболее часто используемым параметрам приложения.
Обратите внимание, что, поскольку вы используете одни и те же действия в своих меню и панелях инструментов, параметры меню также будут отображать значки с левой стороны, что является большим преимуществом с точки зрения производительности и использования ресурсов. Это одно из преимуществ использования действий PyQt для создания меню и панелей инструментов с помощью Python.
Добавление виджетов на панель инструментов
В некоторых ситуациях вам будет полезно добавить на панель инструментов определенные виджеты, такие как счетчики, поля со списком или другие. Типичным примером этого являются поля со списком, которые большинство текстовых процессоров используют, чтобы позволить пользователю изменять шрифт документа или размер выделенного текста.
Теперь, если вы запустите приложение, вы получите следующий результат:
Настройка панелей инструментов
Панели инструментов PyQt довольно гибкие и настраиваемые. Вы можете установить набор свойств для объекта панели инструментов. Некоторые из наиболее полезных свойств показаны в следующей таблице:
Свойство | Функция под контролем | Настройки по умолчанию |
allowedAreas | Области панели инструментов, в которых вы можете разместить данную панель инструментов | Qt.AllToolBarAreas |
floatable | Можно ли перетащить панель инструментов как отдельное окно | True |
floating | Является ли панель инструментов независимым окном | True |
iconSize | Размер иконок, отображаемых на кнопках панели инструментов | Определяется стилем приложения |
movable | Можно ли перемещать панель инструментов внутри области панели инструментов или между областями панели инструментов | True |
orientation | Ориентация панели инструментов | Qt.Horizontal |
Выделенная линия создает здесь волшебство. Теперь ваши пользователи не могут перемещать панель инструментов по окну приложения:
На панели инструментов File больше не отображается двойная пунктирная линия, поэтому ваши пользователи не смогут ее перемещать. Обратите внимание, что панель инструментов Edit по-прежнему подвижна. Вы можете изменить другие свойства на своих панелях инструментов, используя тот же подход, и настроить их в соответствии с вашими потребностями.
Организация параметров меню и панели инструментов
Чтобы добавить ясности и улучшить взаимодействие с пользователем в ваших приложениях с графическим интерфейсом, вы можете организовать параметры меню и кнопки панели инструментов с помощью разделителей. Разделитель отображается как горизонтальная линия, разделяющая пункты меню, или как вертикальная линия, разделяющая кнопки панели инструментов.
Например, вы можете использовать разделитель, чтобы отделить параметр Exit в меню File от остальных параметров, просто чтобы прояснить, что Exit логически не связан с остальными параметрами в меню. Вы также можете использовать разделитель, чтобы отделить опцию Find and Replace в меню Edit от остальных опций, соответствующих тому же правилу.
В первой выделенной строке вы добавляете разделитель между параметрами Save и Exit в меню File. Во второй выделенной строке вы добавляете разделитель, который отделяет опцию Find and Replace от остальных опций в меню Edit. Вот как работают эти дополнения:
В меню File теперь отображается горизонтальная линия, отделяющая параметр Edit от остальных параметров меню. В меню Edit также отображается разделитель в конце раскрывающегося списка параметров. Последовательное использование разделителя может немного улучшить ясность ваших меню и панелей инструментов, делая ваши приложения с графическим интерфейсом пользователя более удобными.
Создание контекстных или всплывающих меню в PyQt
Контекстные меню, также известные как всплывающие меню, представляют собой особый тип меню, которое появляется в ответ на определенные действия пользователя, такие как клик правой кнопкой мыши по заданному виджету или окну. Эти меню предлагают небольшой список параметров, доступных в конкретном контексте используемой вами операционной системы или приложения.
Например, если вы щелкните правой кнопкой мыши рабочий стол компьютера с Windows, вы получите меню с параметрами, которые соответствуют этому конкретному контексту или пространству операционной системы. Если вы щелкните правой кнопкой мыши рабочую область текстового редактора, вы получите совершенно другое контекстное меню, которое будет зависеть от редактора, который вы используете.
В PyQt у вас есть несколько вариантов создания контекстных меню. В этом руководстве вы узнаете о двух из этих вариантов:
Первый вариант является наиболее распространенным и удобным из двух, поэтому вы сначала узнаете о нем.
Создание контекстных меню с помощью политики контекстного меню
Чтобы виджет отображал контекстное меню на основе его внутренних действий, вам необходимо выполнить два шага:
При выборе значения contextMenuPolicy для Qt.ActionsContextMenu виджетов с действиями они отображаются в контекстном меню. Это действительно быстрый способ создать контекстное меню с помощью Python и PyQt.
С помощью этого метода вы можете добавить контекстное меню к центральному виджету вашего образца приложения и предоставить пользователям способ быстрого доступа к некоторым параметрам приложения. Для этого вы можете добавить следующий метод в Window :
Если вы запустите образец приложения после этих добавлений, вы увидите, что центральный виджет приложения показывает контекстное меню, когда вы щелкаете по нему правой кнопкой мыши:
Теперь в вашем примере приложения есть контекстное меню, которое всплывает всякий раз, когда вы щелкаете правой кнопкой мыши в центральном виджете приложения. Центральный виджет растягивается, чтобы занять все доступное пространство в окне, поэтому вы не ограничены щелчком правой кнопкой мыши по тексту метки, чтобы увидеть контекстное меню.
Наконец, поскольку вы используете одни и те же действия во всем приложении, параметры в контекстном меню показывают одинаковый набор значков.
Создание контекстных меню посредством обработки событий
Этот способ управления контекстными меню немного сложнее. Однако он дает вам точный контроль над тем, что происходит при вызове контекстного меню. Например, вы можете включать или отключать опции меню в зависимости от состояния приложения и так далее.
Вот как вы можете повторно реализовать контекстное меню вашего примера приложения, переопределив метод обработчика событий в объекте главного окна:
Если вы запустите образец приложения с этими новыми изменениями, вы получите тот же результат, что и в предыдущем разделе.
Организация параметров контекстного меню
В отличие от меню и панелей инструментов, в контекстных меню нельзя добавить разделитель и визуально разделить параметры меню в соответствии с их взаимосвязью. Когда дело доходит до организации контекстных меню, вам нужно создать действие-разделитель:
Это добавит горизонтальную линию между параметрами файла и параметрами редактирования. Вот как выглядит ваше контекстное меню с этим дополнением:
Подключение сигналов и слотов в меню и панелях инструментов
В PyQt вы используете сигналы и слоты для обеспечения функциональности ваших приложений с графическим интерфейсом. Виджеты PyQt излучают сигналы каждый раз, когда на них происходит такое событие, как щелчок мыши, нажатие клавиши или изменение размера окна.
Чтобы параметры меню и кнопки панели инструментов запускали некоторые операции, когда пользователь нажимает на них, вам необходимо связать сигналы основных действий с некоторыми настраиваемыми или встроенными слотами.
В вашем примере приложения уже есть набор действий. Теперь вам нужно закодировать слоты, которые вы будете вызывать каждый раз, когда пользователь щелкает пункт меню или кнопку панели инструментов. Перейдите к определению Window и добавьте следующие методы:
Эти методы будут играть роль слотов вашего примера приложения. Они будут вызываться каждый раз, когда пользователь щелкает соответствующий пункт меню или кнопку панели инструментов.
С этим последним обновлением вы можете снова запустить приложение. Вот как работают все эти изменения:
Динамическое заполнение меню Python
При создании меню для приложения вам иногда необходимо заполнить эти меню параметрами, которые неизвестны на момент создания графического интерфейса приложения. Например, меню Open Recent в текстовом редакторе показывает список недавно открытых документов. Вы не можете заполнить это меню во время создания графического интерфейса приложения, потому что каждый пользователь будет открывать разные документы, и нет никакого способа узнать эту информацию заранее.
Чтобы продолжить разработку примера приложения, предположим, что вам нужно создать подменю Open Recent в разделе File и динамически заполнить его недавно открытыми файлами или документами. Для этого вам необходимо выполнить следующие действия:
Вот код для создания подменю:
Вы можете сделать это, написав метод динамического создания действий и добавив их в подменю. Вот пример, показывающий общую логику, которую вы можете использовать:
Вот как ваше динамически создаваемое подменю работает на практике:
Определение сочетаний клавиш для параметров меню и панели инструментов
Вот несколько примеров сочетаний клавиш:
В следующем разделе вы узнаете, как добавить в приложение сочетания клавиш, чтобы повысить производительность и удобство работы пользователей.
Использование ключевых последовательностей
До сих пор вы узнали, что QAction это универсальный класс для заполнения меню и панелей инструментов. QAction также предоставляет удобный способ определения сочетаний клавиш для пунктов меню и кнопок панели инструментов.
QKeySequence предоставляет несколько конструкторов. В этом руководстве вы узнаете о двух из них:
Первый конструктор распознает следующие строки:
Второй конструктор удобен, если вы разрабатываете многоплатформенное приложение и хотите использовать стандартные сочетания клавиш для каждой платформы. Например, QKeySequence.Copy вернет стандартное сочетание клавиш платформы для копирования объектов в буфер обмена.
Если вы запустите пример приложения с этими дополнениями, ваши меню будут выглядеть следующим образом:
Теперь в пунктах вашего меню справа отображается сочетание клавиш. Если вы нажмете любую из этих комбинаций клавиш, вы выполните соответствующее действие.
Использование быстрого доступа с клавиатуры
Есть еще одна альтернатива, которую вы можете использовать для добавления сочетаний клавиш или быстрого доступа в пункты меню ваших приложений.
Вы могли заметить, что при установке текста для меню или параметра меню вы обычно вставляете в текст символ амперсанда ( & ). Вы делаете это так, чтобы буква сразу после амперсанда была подчеркнута при отображении в тексте меню или пункта меню. Например, если вы поместите амперсанд перед буквой F в заголовке меню File ( «&File» ), то при отображении заголовка меню буква F будет подчеркнута.
В случае строки меню использование амперсанда позволяет вызывать любое меню, нажимая Alt вместе с подчеркнутой буквой в заголовке меню.
Эта функция позволит вам предоставить быстрые доступ к опциям с помощью клавиатуры для пользователей, которые предпочитают использовать клавиатуру для работы с вашими приложениями. Этот метод особенно полезен для параметров, которые не предоставляют явного сочетания клавиш.
Создание меню и панелей инструментов: передовой опыт и советы
Когда вы создаете меню и панели инструментов с помощью Python и PyQt, вы должны следовать некоторым стандартам, которые обычно считаются лучшими практиками в программировании графического интерфейса. Вот краткий список:
Если вы будете следовать этим рекомендациям, ваши приложения с графическим пользовательским интерфейсом будут знакомыми и привлекательными для ваших пользователей.
Создание строк состояния Python в PyQt
Согласно документации Qt, существует три типа индикаторов состояния:
Вы можете добавить строку состояния к своему приложению в стиле главного окна, используя один из следующих вариантов:
Здесь у вас есть две альтернативные реализации для добавления строки состояния в образец приложения:
Теперь ваше приложение имеет строку состояния в нижней части главного окна. Строка состояния почти не видна, но если вы присмотритесь, то заметите небольшой пунктирный треугольник в правом нижнем углу окна.
Отображение временных сообщений о состоянии
Отображение постоянных сообщений в строке состояния
Вы также можете отображать постоянные сообщения в строке состояния вашего приложения. Постоянное сообщение информирует пользователя об общем состоянии приложения. Например, в текстовом редакторе вы можете отобразить постоянное сообщение с информацией о кодировке текста в текущем открытом файле.
.addPermanentWidget() принимает следующие два аргумента:
Этот метод добавляет логику для вычисления количества слов в текущем открытом документе. Теперь вы можете отображать эту информацию как постоянное сообщение:
В этом случае вы создаете объект QLabel как атрибут экземпляра, потому что количество слов необходимо обновлять в соответствии с изменениями, которые пользователь вносит в текущий файл.
Если вы запустите приложение с этим обновлением, вы увидите сообщение о подсчете слов в правой части строки состояния:
В строке состояния отображается сообщение, информирующее пользователя о количестве слов в гипотетическом текущем файле. Возможность предоставить пользователю постоянную информацию или другие параметры в строке состояния весьма полезна и может помочь вам значительно улучшить взаимодействие с пользователем для ваших приложений.
Добавление подсказок к действиям
Действия PyQt позволяют определять следующие типы подсказок:
Три выделенные строки устанавливают сообщение «Create a new file» как статус и всплывающую подсказку для параметра New. Если вы запустите приложение сейчас, то увидите, что параметр New показывает пользователю краткую, но информативную подсказку:
Если щелкнуть меню File и удерживать указатель мыши на New, вы увидите сообщение с подсказкой, отображаемое в левой части строки состояния. С другой стороны, если вы наведете указатель мыши на кнопку New на панели инструментов, вы увидите сообщение в строке состояния, а также в виде небольшого плавающего прямоугольника рядом с указателем мыши.
В общем, добавление справочных подсказок в меню и панели инструментов Python считается передовой практикой. Это упростит пользователям навигацию и изучение ваших приложений с графическим интерфейсом.