Главная страница

ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов


Скачать 7.92 Mb.
НазваниеНиколай Прохоренок Владимир Дронов
Дата05.05.2023
Размер7.92 Mb.
Формат файлаpdf
Имя файлаПрохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен.pdf
ТипДокументы
#1111379
страница62 из 83
1   ...   58   59   60   61   62   63   64   65   ...   83
, property, changedSignal)
класса
QWizard
. Для стандартных классов по умолчанию используются следующие свойства и сигналы:

Глава 26. Диалоговые окна
647
Класс: Свойство: Сигнал:
QAbstractButton checked toggled()
QAbstractSlider value valueChanged()
QComboBox currentIndex currentIndexChanged()
QDateTimeEdit dateTime dateTimeChanged()
QLineEdit text textChanged()
QListWidget currentRow currentRowChanged()
QSpinBox value valueChanged()
 setField(<Свойство>, <Значение>)
— устанавливает значение указанного свойства.
С помощью этого метода можно изменять значения компонентов, расположенных на разных страницах мастера;
 field(<Свойство>)
— возвращает значение указанного свойства. С помощью этого ме- тода можно получить значения компонентов, расположенных на разных страницах мас- тера;
 setFinalPage(<Флаг>)
— если в качестве параметра указано значение
True
, на странице будет отображаться кнопка Finish;
 isFinalPage()
— возвращает значение
True
, если на странице будет отображаться кноп- ка Finish, и
False
— в противном случае;
 setCommitPage(<Флаг>)
— если в качестве параметра указано значение
True
, на странице будет отображаться кнопка Commit;
 isCommitPage()
— возвращает значение
True
, если на странице будет отображаться кнопка Commit, и
False
— в противном случае;
 isComplete(self)
— этот метод вызывается, чтобы определить, должны ли кнопки Next и Finish быть доступными (метод возвращает значение
True
) или недоступными (метод возвращает значение
False
). Метод можно переопределить в классе, наследующем класс
QWizardPage
, и реализовать собственную проверку правильности ввода данных. При из- менении возвращаемого значения необходимо генерировать сигнал completeChanged()
;
 nextId(self)
— этот метод следует переопределить в классе, наследующем
QWizardPage
, если необходимо изменить порядок отображения страниц. Метод вызывается при нажа- тии кнопки Next. Метод должен возвращать идентификатор следующей страницы или значение
-1
;
 initializePage(self)
— этот метод следует переопределить в классе, наследующем
QWizardPage
, если необходимо производить настройку свойств компонентов на основе данных, введенных на предыдущих страницах. Метод вызывается при нажатии кнопки
Next на предыдущей странице, но до отображения следующей страницы. Если установ- лена опция
IndependentPages
, метод вызывается только при первом отображении стра- ницы;
 cleanupPage(self)
— этот метод следует переопределить в классе, наследующем
QWizardPage
, если необходимо контролировать нажатие кнопки Back. Метод вызывается при нажатии кнопки Back на текущей странице, но до отображения предыдущей стра- ницы. Если установлена опция
IndependentPages
, метод не вызывается;
 validatePage(self)
— этот метод следует переопределить в классе, наследующем
QWizardPage
, если необходимо производить проверку данных, введенных на текущей странице. Метод вызывается при нажатии кнопки Next или Finish. Метод должен вер- нуть значение
True
, если данные корректны, и
False
— в противном случае. Если метод возвращает значение
False
, переход на следующую страницу не производится.

ГЛ А В А
27
Создание SDI- и MDI-приложений
В PyQt включена поддержка создания двух типов приложений:

SDI-приложения (Single Document Interface) — позволяют открыть один документ. Что- бы открыть новый документ, необходимо предварительно закрыть предыдущий или запустить другой экземпляр приложения. Типичными примерами таких приложений являются программы Блокнот, WordPad и Paint, поставляемые в составе операцион- ной системы Windows. Чтобы создать SDI-приложение, следует с помощью метода setCentralWidget()
класса
QMainWindow установить компонент, отображающий содер- жимое документа;

MDI-приложения (Multiple Document Interface) — позволяют открыть сразу несколько документов, каждый — в отдельном вложенном окне. Примером приложения такого ро- да является программа Adobe Photoshop, позволяющая редактировать сразу несколько фотографий одновременно. Чтобы создать MDI-приложение, следует с помощью метода setCentralWidget()
класса
QMainWindow в качестве центрального компонента установить компонент
QMdiArea
. Отдельное вложенное окно внутри MDI-области представляется классом
QMdiSubWindow
Все рассмотренные в этой главе классы объявлены в модуле
QtWidgets
, если не указано иное.
27.1. Главное окно приложения
Класс
QMainWindow реализует главное окно приложения, содержащее меню, панели инстру- ментов, прикрепляемые панели, центральный компонент и строку состояния. Иерархия на- следования для этого класса выглядит так:
(QObject, QPaintDevice) — QWidget — QMainWindow
Конструктор класса
QMainWindow имеет следующий формат:
<Объект> = QMainWindow([parent=None][, flags=0])
В параметре parent указывается ссылка на родительское окно. Доступные значения пара- метра flags мы рассматривали в разд. 18.2.
Класс
QMainWindow наследует все методы базовых классов и поддерживает следующие до- полнительные методы (здесь приведены только интересующие нас — полный их список можно найти на странице https://doc.qt.io/qt-5/qmainwindow.html):

Глава 27. Создание SDI- и MDI-приложений
649
 setCentralWidget()
— делает указанный компонент центральным для главно- го окна;
 centralWidget()
— возвращает ссылку на центральный компонент или значение
None
, если таковой не был установлен;
 setMenuBar()
— позволяет установить пользовательское меню вместо стан- дартного;
 menuBar()
— возвращает ссылку на главное меню (экземпляр класса
QMenuBar
);
 setMenuWidget()
позволяет установить компонент главного меню;
 menuWidget()
— возвращает ссылку на компонент (экземпляр класса
QWidget
), в котором расположено главное меню;
 createPopupMenu()
— создает контекстное меню с пунктами, позволяющими отобразить или скрыть панели инструментов и прикрепляемые панели, и возвращает ссылку на это меню (экземпляр класса
QMenu
). Контекстное меню по умолчанию отображается при щелчке правой кнопкой мыши в области меню, панели инструментов или прикрепляе- мых панелей. Переопределив этот метод, можно реализовать собственное контекстное меню;
 setStatusBar()
— позволяет заменить стандартную строку состояния;
 statusBar()
— возвращает ссылку (экземпляр класса
QStatusBar
) на строку состояния;
 addToolBar()
— добавляет панель инструментов. Форматы метода: addToolBar() addToolBar(<Область>, ) addToolBar(<Название панели>)
Первый формат добавляет панель инструментов в верхнюю часть окна. Второй формат дополнительно позволяет задать местоположение панели. В качестве параметра
<Об- ласть>
могут быть указаны следующие атрибуты класса
QtCore.Qt
:
LeftToolBarArea
(слева),
RightToolBarArea
(справа),
TopToolBarArea
(сверху) или
BottomToolBarArea
(сни- зу). Третий формат создает панель инструментов с указанным именем, добавляет ее в верхнюю область окна и возвращает ссылку на представляющий ее экземпляр класса
QToolBar
;
 insertToolBar(, )
— добавляет панель

перед панелью

;
 removeToolBar()
— удаляет панель инструментов из окна и скрывает ее. При этом объект панели инструментов не удаляется и далее может быть добавлен в другое место;
 toolBarArea()
— возвращает местоположение указанной панели инструмен- тов в виде значений атрибутов
LeftToolBarArea
(слева),
RightToolBarArea
(справа),
TopToolBarArea
(сверху),
BottomToolBarArea
(снизу) или
NoToolBarArea
(положение не определено) класса
QtCore.Qt
;
 setToolButtonStyle(<Стиль>)
— задает стиль кнопок на панели инструментов. В качест- ве параметра указываются следующие атрибуты класса
QtCore.Qt
:

ToolButtonIconOnly

0
— отображается только значок;

ToolButtonTextOnly

1
— отображается только текст;

650
Часть II. Библиотека PyQt 5

ToolButtonTextBesideIcon

2
— текст отображается справа от значка;

ToolButtonTextUnderIcon

3
текст отображается под значком;

ToolButtonFollowStyle

4
— зависит от используемого стиля;
 toolButtonStyle()
— возвращает стиль кнопок на панели инструментов;
 setIconSize()
— задает размеры значков;
 iconSize()
— возвращает размеры значков (экземпляр класса
QSize
);
 setAnimated(<Флаг>)
— если в качестве параметра указано значение
False
, вставка па- нелей инструментов и прикрепляемых панелей в новое место по окончании перемеще- ния будет производиться без анимации. Метод является слотом;
 addToolBarBreak([area=TopToolBarArea])
— вставляет разрыв в указанное место после всех добавленных ранее панелей. По умолчанию панели добавляются друг за другом на одной строке. С помощью этого метода можно поместить панели инструментов на двух и более строках;
 insertToolBarBreak()
— вставляет разрыв перед указанной панелью инстру- ментов;
 removeToolBarBreak()
— удаляет разрыв перед указанной панелью;
 toolBarBreak()
— возвращает значение
True
, если перед указанной панелью инструментов существует разрыв, и
False
— в противном случае;
 addDockWidget()
— добавляет прикрепляемую панель. Форматы метода: addDockWidget(<Область>, ) addDockWidget(<Область>, , <Ориентация>)
Первый формат добавляет прикрепляемую панель в указанную область окна. В качестве параметра
<Область>
могут быть указаны следующие атрибуты класса
QtCore.Qt
:
LeftDockWidgetArea
(слева),
RightDockWidgetArea
(справа),
TopDockWidgetArea
(сверху) или
BottomDockWidgetArea
(снизу). Второй формат позволяет дополнительно указать ориентацию при добавлении панели. В качестве параметра
<Ориентация>
могут быть ука- заны следующие атрибуты класса
QtCore.Qt
:
Horizontal или
Vertical
. Если указан ат- рибут
Horizontal
, добавляемая панель будет расположена справа от ранее добавленной панели, а если
Vertical
— снизу;
 removeDockWidget()
— удаляет панель из окна и скрывает ее. При этом объект панели не удаляется и впоследствии может быть добавлен в другую область;
 dockWidgetArea()
— возвращает местоположение указанной панели в виде значений атрибутов
LeftDockWidgetArea
(слева),
RightDockWidgetArea
(справа),
TopDockWidgetArea
(сверху),
BottomDockWidgetArea
(снизу) или
NoDockWidgetArea
(поло- жение не определено) класса
QtCore.Qt
;
 setDockOptions(<Опции>)
— устанавливает опции для прикрепляемых панелей. Значение по умолчанию:
AnimatedDocks | AllowTabbedDocks
. В качестве значения указывается комбинация (через оператор
|
) следующих атрибутов класса
QMainWindow
:

AnimatedDocks
если опция установлена, вставка панелей в новое место по оконча- нии перемещения будет производиться с анимацией;

AllowNestedDocks
— если опция установлена, в любую область можно будет помес- тить несколько панелей;

Глава 27. Создание SDI- и MDI-приложений
651

AllowTabbedDocks
— если опция установлена, панели могут быть наложены одна на другую. Для переключения между накладывающимися панелями будет использо- ваться панель с вкладками;

ForceTabbedDocks
— если опция установлена, панели не могут быть расположены рядом друг с другом. При этом опция
AllowNestedDocks игнорируется;

VerticalTabs
— если опция установлена, заголовки вкладок будут отображаться с внешнего края области (если область справа, то и заголовки вкладок справа, если область слева, то и заголовки слева, если область сверху, то и заголовки вкладок сверху, если область снизу, то и заголовки вкладок снизу). Если опция не установле- на, заголовки вкладок отображаются снизу. Опция
AllowTabbedDocks должна быть установлена;

GroupedDragging
— если опция установлена, при перетаскивании любой панели все остальные панели, наложенные на нее, будут перетаскиваться вместе с ней. Опция
AllowTabbedDocks должна быть установлена. Поддерживается, начиная с PyQt 5.6;
В
НИМАНИЕ
!
Опции необходимо устанавливать до добавления прикрепляемых панелей. Исключением являются опции 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
(слева),
RightDockWidgetArea
(справа),

652
Часть II. Библиотека PyQt 5
TopDockWidgetArea
(сверху) или
BottomDockWidgetArea
(снизу). В параметре
<Угол>
ука- зываются следующие атрибуты класса
QtCore.Qt
:

TopLeftCorner
— левый верхний угол;

TopRightCorner
— правый верхний угол;

BottomLeftCorner
— левый нижний угол;

BottomRightCorner
— правый нижний угол;
 corner(<Угол>)
— возвращает область, за которой закреплен указанный угол;
 splitDockWidget(, , <Ориентация>)
— разделяет об- ласть, занимаемую панелью

, и добавляет панель

в пер- вую часть области, а панель

— во вторую. Порядок расположения час- тей зависит от параметра
<Ориентация>
. В качестве параметра
<Ориентация>
могут быть указаны следующие атрибуты класса
QtCore.Qt
:
Horizontal или
Vertical
. Если указан атрибут
Horizontal
, то панель

будет расположена справа, а если
Vertical
— то снизу. Если панель

расположена на вкладке, панель

будет добавлена на новую вкладку, и разделения области при этом не произойдет;
 tabifyDockWidget(, )
— размещает панель
2>
над панелью

, создавая таким образом область с вкладками;
 tabifiedDockWidgets()
— возвращает список ссылок на панели (экземп- ляры класса
QDockWidget
), которые расположены на других вкладках в области панели, указанной в качестве параметра;
 resizeDocks(<Список QDockWidget>, <Список размеров>, <Ориентация>)
— задает новые размеры для панелей, указанных в параметре
<Список QDockWidhet>
, при этом первый размер из указанных в параметре
<Список размеров>
будет применен к первой панели, второй — ко второй панели и т. д. Если третьим параметром передан атрибут
Horizontal класса
QtCore.Qt
,
<Список размеров>
задаст значения ширины панелей, если указан ат- рибут
Vertical
— высоты. Размеры панелей, не указанных в первом списке, будут изме- нены таким образом, чтобы вместиться в оставшееся свободное пространство. Размеры самого окна при этом не изменяются. Метод поддерживается, начиная с PyQt 5.6;
 saveState([version=0])
— возвращает экземпляр класса
QByteArray с размерами и положением всех панелей инструментов и прикрепляемых панелей. Эти данные мож- но сохранить (например, в файл), а затем восстановить с помощью метода restoreState([, version=0])
Обратите внимание, что все панели инструментов и прикрепляемые панели должны иметь уникальные объектные имена. Задать объектное имя можно с помощью метода setObjectName(<Имя в виде строки>)
класса
QObject
: self.dw = QtWidgets.QDockWidget("MyDockWidget1") self.dw.setObjectName("MyDockWidget1")
Чтобы сохранить размеры окна, следует воспользоваться методом saveGeometry()
класса
QWidget
. Метод возвращает экземпляр класса
QByteArray с размерами окна. Чтобы вос- становить размеры окна, достаточно вызвать метод restoreGeometry()
;
 restoreDockWidget()
— восстанавливает состояние указанной панели, если она была создана после вызова метода restoreState()
. Метод возвращает значение
True
, если состояние панели успешно восстановлено, и
False
— в противном случае.

Глава 27. Создание SDI- и MDI-приложений
653
В PyQt 5.8 появилась поддержка сигнала tabifiedDockWidgetActivated(
1   ...   58   59   60   61   62   63   64   65   ...   83


написать администратору сайта