Найти в Дзене
programmer's notes (python and more)

Программироание на языке python. Библиотека PyQt5. Окна класса QMainWindow (панели инструментов, меню и докеры)

Оглавление

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

Создание окна на основе класса QMainWindow

Класс QMainWindow является дочерним классу QWidget. Он наследует от него, естественно множество обычных и виртуальных методов. Если вы возьмёте наши старые программы то, скорее всего, все они будут также выполняться, если вместо QWidget создавать окна на основе QMainWindow. Подвергать полной ревизии, что в QMainWindow появилось нового, как изменились некоторые старые методы (а таких много), я не буду. Замечу только, что QMainWindow лучше, чем QWidget работает с меню, панелями инструментов и с так называемыми докерами (QDockWidget). Точнее даже так, в QMainWindow есть методы поддержки этих элементов, а в QWidget их нет. Отмечу, кстати, что я даже до сих пор не упоминал QDockWidget, так как в QWidget с этим элементом работать неудобно. Как пишут в документации и статьях QMainWindow это класс для разработки больших, сложных приложений. Впрочем, как на это посмотреть, конечно.

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

QMainWindow и панели инструментов (QToolBar)

Рассмотрим следующую программу. Она демонстрирует работу с панелями инструментов

В программе сразу две панели инструментов (см. Рисунок 1)

Пример QMainWindow с двумя панелями инструментов. Текст программы см. по ссылке ниже
Пример QMainWindow с двумя панелями инструментов. Текст программы см. по ссылке ниже
primer258.py

Несколько пояснений к программе

QToolBar создаётся обычным способом, а далее (sic!) используется специальный метод QMainWindow.addToolBar(). При этом для панели инструментов можно использовать уже известные нам элементы окна. Обращу внимание также, что для того, чтобы использовать две (несколько) панелей инструментов надо применить метод addToolBarBreak(). И ещё один важный момент. Окно "понимает" наличие в нём панелей и обрабатывает изменение размеров окна (масштабирование).

Рисунок 1. Окно с двумя панелями инструментов. Автоматически срабатывает масштабирование.
Рисунок 1. Окно с двумя панелями инструментов. Автоматически срабатывает масштабирование.

QMainWindow и меню (menuBar)

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

Скриншот программы Окно с меню. Текст программы см. ниже по ссылке
Скриншот программы Окно с меню. Текст программы см. ниже по ссылке
primer259.py

Несколько пояснений к программе.

Меню в окне создаётся сразу методом QMainWindow.menuBar(). При этом создаётся объект, принадлежащий окну, с которым мы уже далее работаем. Меню верхнего уровня создаётся методам addMenu() этого объекта. При этом опять же создаются объекты, к которым можно добавлять пункты выпадающего меню (QAction), а к ним, естественно, можно уже привязать действия: exit.triggered.connect(self.close). Схема очень проста и опять же окно "знает" о меню и учитывает это при изменении размеров.

Рисунок 2. Окно  панелью меню
Рисунок 2. Окно панелью меню

QMainWindow и докер (QDockWidget)

Докер очень интересный элемент. Это как бы такое маленькое окно. Туда можно поместить элемент. Докер можно сделать плавающим, т.е. он будет свободно перемещаться мышью по всему экрану. Ниже представлена программа с двумя докерами (см. Рисунок 3).

Скриншот программы Окно с докерами. Текст программы см. ниже по ссылке
Скриншот программы Окно с докерами. Текст программы см. ниже по ссылке
primer260.py

Несколько пояснений к программе

В программе создаётся два плавающих докера (см. метод setFloating(True)). Для каждого докера можно установить свой элемент setWidget(). Отметим особо, что координаты докера нужно отсчитывать от начала экрана (см. метод QDockWidget.move()). Вы можете сказать, ну как же так, только один элемент на докере. Да ничего подобного. Вы же можете поместить туда целую панель инструментов. Попробуйте (см. рисунок 4).

Рисунок 3. Окно с двумя докерами
Рисунок 3. Окно с двумя докерами
Рисунок 4. Окно с плавающим докером, на котором помещена панель инструментов.
Рисунок 4. Окно с плавающим докером, на котором помещена панель инструментов.

Ну, пока всё!

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

Окна это, конечно, хорошее изобретение, но по-прежнему мила командная строка и чёрный квадрат терминала
Окна это, конечно, хорошее изобретение, но по-прежнему мила командная строка и чёрный квадрат терминала