Найти тему

Программирование на языке Python. Библиотека PyQt5. Простейшее меню, класс QtWidgets.QMenu

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Всплывающее меню (QMenu) по нажатию кнопки (QPushButton)

Сегодня рассматриваем класс QMenu, с помощью которого можно создавать простое одномерное всплывающее меню, привязанное к конкретному месту.

Ниже прелставлена программы с кнопкой, при нажатии которой появляется меню. С помощью пунктов меню можно выбрать цвет кнопки. Также есть пункт выхода из программы (см. Рисунок 1).

Скриншот фрагмента программы - класс окна. Весь текст программы см. по ссылке ниже
Скриншот фрагмента программы - класс окна. Весь текст программы см. по ссылке ниже

В классе окна (метод initUI()) создаётся кнопка на основе класса Btn(QPushButton).

Скриншот основной части класса кнопки. Весть текст программы см. по ссылке ниже
Скриншот основной части класса кнопки. Весть текст программы см. по ссылке ниже

Класса кнопка Btn. Тут важен метод click(), который вызывается при щелчке мыши по нему или нажатию клавиши Пробел, если фокус находится на кнопке. В методе создаётся меню на основе класса QMenu. Метод QMenu.addAction() позволяет добавить пункты меню. Далее добавляются обработчики для каждого пункта меню. Запуск меню, его появление осуществляется методом QMenu.exec(). Тут важно обратить внимание на параметр метода. Это координаты, где должно появиться меню. Мы указываем координаты курсора с помощью класса QCursor. Это было бы полностью корректно, если кнопка нажимается только щелчком мыши. Если мы нажимаем кнопку с помощью клавиатуры, то меню может появиться в самом неожиданном месте. Тогда либо обрабатываем событие mousePressEvent(), либо используем абсолютные координаты кнопки. Например так (вместо qm.exec(QCursor.pos())):

p = QPoint()
p.setX(self.x + self.wg.x())
p.setX(self.y + self.wg.y())
qm.exec(p)

где класс QPoint описывает координаты точки. Его нужно импортировать:

from PyQt5.QtCore import QPoint

Скриншот части класса кнопки, обрабатывающей выборы пункта меню. Весть текст программы см. по ссылке ниже
Скриншот части класса кнопки, обрабатывающей выборы пункта меню. Весть текст программы см. по ссылке ниже

Представленные здесь методы меняют цвет фоны кнопки используя метод setStyleSheet().

primer241.py

Рисунок 1.
Рисунок 1.

Ну, пока всё!

Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.

У вас и меню даже нет
У вас и меню даже нет

Наука
7 млн интересуются