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