Шаг 271.
Библиотека PyQt5.
Создание SDI- и MDI-приложений. Создание главного окна приложения
На этом шаге мы рассмотрим иерархию наследования этого класса, формат конструктора и перечислим основные методы.
Класс QMainWindow реализует главное окно приложения, содержащее меню, панели инструментов, прикрепляемые панели, центральный компонент и строку состояния. Иерархия
наследования для этого класса выглядит так:
(QObject, QPaintDevice) - QWidget - QMainWindow
Конструктор класса QMainWindow имеет следующий формат:
<Объект> = QMainWindow([parent=None][, flags=0])
В параметре parent указывается ссылка на родительское окно. Доступные значения параметра flags мы рассматривали на 25 шаге.
Класс QMainWindow наследует все методы из базовых классов и поддерживает следующие дополнительные методы (здесь приведены только интересующие нас - полный их список доступен на странице
https://doc.qt.io/qt-5/qmainwindow.html):
- setCentralWidget (<QWidget>) - делает указанный компонент центральным для главного окна;
- centralWidget () - возвращает ссылку на центральный компонент или значение None, если таковой не был установлен;
- setMenuBar (<CMenuBar>) - позволяет установить пользовательское меню вместо стандартного;
- menuBar () - возвращает ссылку на главное меню (экземпляр класса QMenuBar);
- setMenuWidget (<QWidget>) - позволяет установить компонент главного меню;
- menuWidget () - возвращает ссылку на компонент (экземпляр класса QWidget), в котором расположено главное меню;
- createPopupMenu () - создает контекстное меню с пунктами, позволяющими отобразить или скрыть панели инструментов и прикрепляемые панели, и возвращает ссылку на это меню
(экземпляр класса QMenu). Контекстное меню по умолчанию отображается при щелчке правой кнопкой мыши в области меню, панели инструментов или прикрепляемых панелей.
Переопределив этот метод, можно реализовать собственное контекстное меню;
- setStatusBar (<QStatusBar>) - позволяет заменить стандартную строку состояния;
- statusBar () - возвращает ссылку (экземпляр класса QStatusBar) на строку состояния;
- addToolBar () - добавляет панель инструментов. Форматы метода:
addToolBar(<QToolBar>)
addToolBar(<Область>, <QToolBar>)
addToolBar(<Название панели>)
Первый формат добавляет панель инструментов в верхнюю часть окна. Второй формат дополнительно позволяет задать местоположение панели. В качестве параметра
<Область> могут быть указаны следующие атрибуты класса QtCore.Qt:
- LeftToolBarArea (слева),
- RightToolBarArea (справа),
- TopToolBarArea (сверху) или
- BottomToolBarArea (снизу).
Третий формат создает панель инструментов с указанным именем, добавляет ее в верхнюю область окна и возвращает ссылку на представляющий ее экземпляр класса GToolBar;
- insertToolBar (<QToolBarl>, <QToolBar2>) - добавляет панель <QToolBar2> перед панелью <QToolBarl>;
- removeToolBar (<QToolBar>) - удаляет панель инструментов из окна и скрывает ее. При этом объект панели инструментов не удаляется и далее может быть добавлен в другое место;
- toolBarArea (<QToolBar>) - возвращает местоположение указанной панели инструментов в виде значений атрибутов:
- LeftToolBarArea (слева),
- RightToolBarArea (справа),
- TopToolBarArea (сверху),
- BottomToolBarArea (снизу) или
- NoToolBarArea (положение не определено)
класса QtCore.Qt;
- setToolButtonStyle (<Стиль>) - задает стиль кнопок на панели инструментов. В качестве параметра указываются следующие атрибуты класса QtCore.Qt:
- ToolButtonIconOnly (или 0) - отображается только значок;
- ToolButtonTextOnly (или 1) - отображается только текст;
- ToolButtonTextBesideIcon (или 2) - текст отображается справа от значка;
- ToolButtonTextUnderIcon (или 3) - текст отображается под значком;
- ToolButtonFollowStyle (или 4) - зависит от используемого стиля;
- toolButtonStyle () - возвращает стиль кнопок на панели инструментов;
- setIconSize (<QSize>) -задает размеры значков;
- iconSize () - возвращает размеры значков (экземпляр класса QSize);
- setAnimated (<Флаг>) - если в качестве параметра указано значение False, вставка панелей инструментов и прикрепляемых панелей в новое место по окончании
перемещения будет производиться без анимации. Метод является слотом;
- addToolBarBreak ([area=TopToolBarArea]) - вставляет разрыв в указанное место после всех добавленных ранее панелей. По умолчанию панели добавляются друг за другом на одной
строке. С помощью этого метода можно поместить панели инструментов на двух и более строках;
- insertToolBarBreak (<QToolBar>) - вставляет разрыв перед указанной панелью инструментов;
- removeTooBarBreak (<QToolBar>) - удаляет разрыв перед указанной панелью;
- toolBarBreak (<QToolBar>) - возвращает значение True, если перед указанной панелью инструментов существует разрыв, и False - в противном случае;
- addDockWidget () - добавляет прикрепляемую панель. Форматы метода:
addDockwidget(<Область>, <QDockWidget>)
addDockwidget(<Область>, <QDockWidget>, <Ориентация>)
Первый формат добавляет прикрепляемую панель в указанную область окна. В качестве параметра <Область> могут быть указаны следующие атрибуты класса QtCore.Qt:
- LeftDockWidgetArea (слева),
- RightDockWidgetArea (справа),
- TopDockWidgetArea (сверху) или
- BottomDockWidgetArea (снизу).
Второй формат позволяет дополнительно указать ориентацию при добавлении панели. В качестве параметра <Ориентация> могут быть указаны следующие атрибуты класса QtCore.Qt:
Horizontal или Vertical. Если указан атрибут Horizontal, то добавляемая панель будет расположена справа от ранее добавленной панели, а если Vertical - то снизу;
- removeDockWidget (<QDockWidget>) - удаляет панель из окна и скрывает ее. При этом объект панели не удаляется и впоследствии может быть добавлен в другую область;
- dockWidgetArea (<QDockWidget>) - возвращает местоположение указанной панели в виде значений атрибутов:
- LeftDockWidgetArea (слева),
- Right DockWidgetArea (справа),
- TopDockWidgetArea (сверху),
- BottomDockWidgetArea (снизу) или
- NoDockWidgetArea (положение не определено)
класса QtCore.Qt;
- setDockOptions (<Опции>) - устанавливает опции для прикрепляемых панелей. Значение по умолчанию: AnimatedDocks | AllowTabbedDocks. В качестве значения
указывается комбинация (через оператор |) следующих атрибутов класса QMainWindow:
- AnimatedDocks - если опция установлена, вставка панелей в новое место по окончании перемещения будет производиться с анимацией;
- AllowNestedDocks - если опция установлена, в любую область можно будет поместить несколько панелей;
- AllowTabbedDocks - если опция установлена, панели могут быть наложены одна на другую. Для переключения между накладывающимися панелями будет использоваться панель с вкладками;
- ForceTabbedDocks - если опция установлена, панели не могут быть расположены рядом друг с другом. При этом опция AllowNestedDocks игнорируется;
- VerticalTabs - если опция установлена, заголовки вкладок будут отображаться с внешнего края области (если область справа, то и заголовки вкладок справа, если область слева, то и заголовки слева, если область сверху, то и заголовки вкладок сверху, если область снизу, то и заголовки вкладок снизу).
Если опция не установлена, то заголовки вкладок отображаются снизу. Опция AllowTabbedDocks должна быть установлена;
Примечание.
Опции необходимо устанавливать до добавления прикрепляемых панелей. Исключением являются опции AnimatedDocks и VerticalTabs.
- dockOptions () - возвращает комбинацию установленных опций;
- setDockNestingEnabled (<Флаг>) - если указано значение True, метод устанавливает опцию AllowNestedDocks, а если указано значение False - то сбрасывает ее. Метод является слотом;
- isDockNestingEnabled () - возвращает значение True, если опция AllowNestedDocks установлена, и False - в противном случае;
- setTabPosition (<Область>, <Позиция>) - задает позицию отображения заголовков вкладок для указанной области. По умолчанию заголовки вкладок отображаются снизу.
В качестве параметра <Позиция> могут быть указаны следующие атрибуты класса QTabWidget:
- North (или 0) - сверху;
- South (или 1) - снизу;
- West (или 2) - слева;
- East (или 3) - справа;
- tabPosition (<Область>) - возвращает позицию отображения заголовков вкладок прикрепляемых панелей для указанной области;
- setTabShape (<Форма>) - задает форму углов ярлыков вкладок. Могут быть указаны следующие атрибуты класса QTabWidget:
- Rounded (или 0) - скругленные углы (значение по умолчанию);
- Triangular (или 1) - треугольная форма;
- tabShape () - возвращает форму углов ярлыков вкладок в области заголовка;
- setCorner (<Угол>, <Область>) - позволяет закрепить указанный угол за определенной областью. По умолчанию верхние углы закреплены за верхней областью, а
нижние - за нижней областью, В качестве параметра <Область> могут быть указаны следующие атрибуты класса QtCore.Qt:
- LeftDockWidgetArea (слева),
- Right DockWidgetArea (справа),
- TopDockWidgetArea (сверху) или
- BottomDockWidgetArea (снизу).
В параметре <Угол> указываются следующие атрибуты класса QtCore.Qt:
- TopLeftCorner - левый верхний угол;
- TopRightCorner - правый верхний угол;
- BottomLeftCorner - левый нижний угол;
- BottomRightCorner - правый нижний угол;
- corner (<Угол>) - возвращает область, за которой закреплен указанный угол;
- splitDockWidget (<QDockWidget1>, <QDockWidget2>, <Ориентация>) - разделяет область, занимаемую панелью <QDockWidget1>, и добавляет панель
<QDockWidget1> в первую часть области, а панель <QDockWidget2> - во вторую. Порядок расположения частей зависит от параметра <Ориентация>.
В качестве параметра <Ориентация> могут быть указаны следующие атрибуты класса QtCore.Qt: Horizontal или Vertical. Если указан атрибут
Horizontal, то панель <QDockWidget2> будет расположена справа, а если Vertical - то снизу. Если панель <QDockWidget1> расположена на вкладке,
то панель <QDockWidget2> будет добавлена на новую вкладку, и разделения области при этом не происходит;
- tabifyDockWidget (<QDockWidget1>, <QDockWidget2>) - размещает панель <QDockWidget2> над панелью <QDockWidget1>, создавая таким образом область с вкладками;
- tabifiedDockWidgets (<QDockWidget>) - возвращает список ссылок на панели (экземпляры класса QDockWidget), которые расположены на других вкладках в области панели, указанной в качестве параметра;
- saveState ([version=0]) - возвращает экземпляр класса QByteArray с размерами и положением всех панелей инструментов и прикрепляемых панелей. Эти данные можно сохранить
(например, в файл), а затем восстановить с помощью метода restoreState(<QByteArray>[, version=0]).
Обратите внимание, что все панели инструментов и прикрепляемые панели должны иметь уникальные объектные имена. Задать объектное имя можно с помощью метода
setObjectName(<Имя виде строки>) класса QObject. Пример:
self.dw = QtWidgets.QDockWidget("MyDockWidget1")
self.dw.setObjectName("MyDockWidget1")
Чтобы сохранить размеры окна, следует воспользоваться методом saveGeometry() класса QWidget. Метод возвращает экземпляр класса QByteArray с размерами окна.
Чтобы восстановить размеры окна, достаточно вызвать метод restoreGeometry(<QByteArray>);
- restoreDockWidget (<QDockWidget>) - восстанавливает состояние указанной панели, если она была создана после вызова метода restoreState(). Метод возвращает значение
True, если состояние панели успешно восстановлено, и False - в противном случае.
На следующем шаге мы начнем знакомиться с меню.
Предыдущий шаг
Содержание
Следующий шаг