ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 05.12.2023
Просмотров: 886
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
668
Часть II. Библиотека PyQt 5
insertPermanentWidget(<Индекс>,
— добавляет компонент в ука- занную позицию постоянной секции и возвращает индекс позиции. В параметре stretch может быть указан фактор растяжения;
removeWidget(
— удаляет компонент из обычной или постоянной секций. При этом сам компонент не удаляется, а только скрывается, лишается родителя и в дальней- шем может быть помещен в другое место;
setSizeGripEnabled(<Флаг>)
— если в качестве параметра указано значение
True
, в пра- вом нижнем углу строки состояния будет отображаться маркер изменения размера. Зна- чение
False скрывает маркер.
Класс
QStatusBar поддерживает сигнал messageChanged(<Сообщение>)
, генерируемый при изменении текста во временной секции. Внутри обработчика через параметр доступно но- вое сообщение или пустая строка.
27.6. MDI-приложения
MDI-приложения (Multiple Document Interface) позволяют, как уже было отмечено ранее, открыть несколько документов одновременно в разных вложенных окнах. Чтобы создать
MDI-приложение, следует в качестве центрального компонента установить компонент
QMdiArea вызовом метода setCentralWidget()
класса
QMainWindow
. Отдельное окно внутри
MDI-области представляется классом
QMdiSubWindow
27.6.1. Класс QMdiArea
Класс
QMdiArea реализует MDI-область, внутри которой могут располагаться вложенные окна (экземпляры класса
QMdiSubWindow
). Иерархия наследования для класса
QMdiArea вы- глядит так:
(QObject, QPaintDevice) — QWidget — QFrame —
QAbstractScrollArea — QMdiArea
Конструктор класса
QMdiArea имеет следующий формат:
<Объект> = QMdiArea([parent=None])
В параметре parent указывается ссылка на родительское окно.
Класс
QMdiArea поддерживает следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qmdiarea.html):
addSubWindow(
— создает вложенное окно с флагами flags
(см. разд. 18.2), добавляет в него заданный в первом параметре компонент и возвращает ссылку на созданное окно (экземпляр класса
QMdiSubWindow
): w = MyWidget() sWindow = self.mdi_area.addSubWindow(w) sWindow.setAttribute(QtCore.Qt.WA_DeleteOnClose)
# ... Задаем параметры окна sWindow.show()
Чтобы окно автоматически удалялось при закрытии, необходимо установить атрибут
WA_DeleteOnClose
, а чтобы отобразить окно, — вызвать метод show()
В первом параметре этого метода также можно указать ссылку на существующее вло- женное окно (экземпляр класса
QMdiSubWindow
):
Глава 27. Создание SDI- и MDI-приложений
669 w = MyWidget() sWindow = QtWidgets.QMdiSubWindow() self.mdi_area.addSubWindow(sWindow) sWindow.setAttribute(QtCore.Qt.WA_DeleteOnClose)
# ... Производим настройку свойств окна sWindow.setWidget(w) sWindow.show()
Также можно добавить вложенное окно в MDI-область, указав последнюю в качестве родителя при создании объекта вложенного окна: sWindow = QtWidgets.QMdiSubWindow(self.mdi_area)
activeSubWindow()
— возвращает ссылку на активное вложенное окно (экземпляр класса
QMdiSubWindow
) или значение
None
;
currentSubWindow()
— возвращает ссылку на текущее вложенное окно (экземпляр класса
QMdiSubWindow
) или значение
None
. Результат выполнения этого метода аналогичен тако- вому у метода activeSubWindow()
, если MDI-область находится в активном окне;
subWindowList([order=CreationOrder])
— возвращает список со ссылками на все вло- женные окна (экземпляры класса
QMdiSubWindow
), добавленные в MDI-область, или пус- той список. В параметре order указываются следующие атрибуты класса
QMdiArea
:
•
CreationOrder
—
0
— окна в списке располагаются в порядке их создания;
•
StackingOrder
—
1
— окна в списке располагаются в порядке размещения их на экране. Последний элемент в списке будет содержать ссылку на самое верхнее окно, а последний — ссылку на самое нижнее окно;
•
ActivationHistoryOrder
—
2
— окна в списке располагаются в порядке истории по- лучения фокуса. Последний элемент в списке будет содержать ссылку на окно, полу- чившее фокус последним;
removeSubWindow(
— удаляет вложенное окно из MDI-области;
setActiveSubWindow(
— делает указанное вложенное окно активным.
Если задать значение
None
, все вложенные окна станут неактивными. Метод является слотом;
setActivationOrder(<Порядок>)
— задает порядок передачи фокуса при использовании методов activatePreviousSubWindow()
, activateNextSubWindow()
и др. В параметре ука- зываются те же атрибуты, что и в параметре метода subWindowList()
;
activationOrder()
— возвращает порядок передачи фокуса;
activatePreviousSubWindow()
— делает активным предыдущее вложенное окно. Метод является слотом. Порядок передачи фокуса устанавливается с помощью метода setActivationOrder()
;
activateNextSubWindow()
— делает активным следующее вложенное окно. Метод яв- ляется слотом. Порядок передачи фокуса устанавливается с помощью метода setActivationOrder()
;
closeActiveSubWindow()
— закрывает активное вложенное окно. Метод является слотом;
closeAllSubWindows()
— закрывает все вложенные окна. Метод является слотом;
cascadeSubWindows()
— выстраивает вложенные окна в виде стопки. Метод является слотом;
670
Часть II. Библиотека PyQt 5
tileSubWindows()
— выстраивает вложенные окна в виде мозаики. Метод является сло- том;
setViewMode(<Режим>)
— задает режим отображения вложенных окон в MDI-области.
В параметре
<Режим>
указываются следующие атрибуты класса
QMdiArea
:
•
SubWindowView
—
0
— в виде собственно окон (по умолчанию);
•
TabbedView
—
1
— в виде отдельных вкладок на панели с вкладками;
viewMode()
— возвращает режим отображения вложенных окон в MDI-области;
setTabPosition(<Позиция>)
— задает позицию отображения заголовков вкладок при ис- пользовании режима
TabbedView
. По умолчанию заголовки вкладок отображаются свер- ху. В качестве параметра
<Позиция>
могут быть указаны следующие атрибуты класса
QTabWidget
:
•
North
—
0
— сверху;
•
South
—
1
— снизу;
•
West
—
2
— слева;
•
East
—
3
— справа;
tabPosition(<Область>)
— возвращает позицию отображения заголовков вкладок при использовании режима
TabbedView
;
setTabShape(<Форма>)
— задает форму углов ярлыков вкладок при использовании режи- ма
TabbedView
. Могут быть указаны следующие атрибуты класса
QTabWidget
:
•
Rounded
—
0
— скругленные углы (значение по умолчанию);
•
Triangular
—
1
— треугольная форма;
tabShape()
— возвращает форму углов ярлыков вкладок в области заголовка при ис- пользовании режима
TabbedView
;
setTabsMovable(<Флаг>)
— если передано значение
True
, вкладки на панели при исполь- зовании режима
TabbedView можно перемещать мышью;
setTabsClosable(<Флаг>)
— если передано значение
True
, вкладки на панели при использовании режима
TabbedView можно закрывать щелчком на расположенной в за- головке вкладки кнопке закрытия;
setBackground(
— задает кисть для заполнения фона MDI-области;
setOption(<Опция>[, on=True])
— если во втором параметре указано значение
True
, за- данная в первом параметре опция будет установлена, если
False
— сброшена. В пара- метре
<Опция>
может быть указан атрибут
DontMaximizeSubWindowOnActivation класса
QMdiArea
, в случае установки запрещающий автоматически разворачивать следующее вложенное окно при переключении на него из уже развернутого окна;
testOption(<Опция>)
— возвращает значение
True
, если указанная опция установлена, и
False
— в противном случае.
Класс
QMdiArea поддерживает сигнал subWindowActivated(
, генерируемый при активизации другого вложенного окна. В обработчике через параметр доступна ссылка на активизированное вложенное окно или значение
None
Глава 27. Создание SDI- и MDI-приложений
671 27.6.2. Класс QMdiSubWindow
Класс
QMdiSubWindow реализует окно, которое может быть отображено внутри MDI-области.
Иерархия наследования для него выглядит следующим образом:
(QObject, QPaintDevice) — QWidget — QMdiSubWindow
Формат конструктора класса
QMdiSubWindow
:
<Объект> = QMdiSubWindow([parent=None][, flags=0])
В параметре parent указывается ссылка на родительское окно. Доступные значения пара- метра flags мы рассматривали в разд. 18.2.
Класс
QMdiSubWindow наследует все методы базовых классов и дополнительно поддерживает следующие методы (полный их список можно найти на странице https://doc.qt.io/qt-5/ qmdisubwindow.html):
setWidget(
— помещает компонент в окно;
widget()
— возвращает ссылку на помещенный в окно компонент;
mdiArea()
— возвращает ссылку на MDI-область (экземпляр класса
QMdiArea
) или значе- ние
None
;
setSystemMenu(
— позволяет установить пользовательское системное меню окна вместо стандартного;
systemMenu()
— возвращает ссылку на системное меню окна (экземпляр класса
QMenu
) или значение
None
;
showSystemMenu()
— открывает системное меню окна. Метод является слотом;
setKeyboardSingleStep(<Значение>)
— устанавливает шаг изменения размера окна или его положения с помощью клавиш со стрелками. Чтобы изменить размеры окна или его положение с клавиатуры, необходимо в системном меню окна выбрать пункт Перемес- тить или Размер. Значение по умолчанию —
5
;
setKeyboardPageStep(<Значение>)
— устанавливает шаг изменения размера окна или его положения с помощью клавиш со стрелками при удержании нажатой клавиши
Значение по умолчанию —
20
;
showShaded()
— сворачивает содержимое окна, оставляя только заголовок. Метод явля- ется слотом;
isShaded()
— возвращает значение
True
, если отображается только заголовок окна, и
False
— в противном случае;
setOption(<Опция>[, on=True])
— если во втором параметре указано значение
True
, за- данная в первом параметре опция будет установлена, а если
False
— сброшена. В пара- метре
<Опция>
могут быть указаны следующие атрибуты класса
QMdiSubWindow
:
•
RubberBandResize
— если опция установлена, при изменении размеров окна станут изменяться размеры вспомогательного компонента, а не самого окна. По окончании изменения размеров будут изменены размеры окна;
•
RubberBandMove
— если опция установлена, при изменении положения окна станет перемещаться вспомогательный компонент, а не само окно. По окончании переме- щения будет изменено положение окна;
testOption(<Опция>)
— возвращает значение
True
, если указанная опция установлена, и
False
— в противном случае.
672
Часть II. Библиотека PyQt 5
Класс
QMdiSubWindow поддерживает следующие сигналы:
aboutToActivate()
— генерируется перед активацией вложенного окна;
windowStateChanged(<Старое состояние>, <Новое состояние>)
— генерируется при из- менении состояния окна. Внутри обработчика через параметры доступны целочислен- ные обозначения старого и нового состояний.
27.7. Добавление значка приложения в область уведомлений
Класс
QSystemTrayIcon позволяет добавить значок приложения в область уведомлений, рас- положенную в правой части панели задач Windows. Иерархия наследования для этого клас- са выглядит так:
QObject — QSystemTrayIcon
Форматы конструктора класса
QSystemTrayIcon
:
<Объект> = QSystemTrayIcon([parent=None])
<Объект> = QSystemTrayIcon(
В параметре parent указывается ссылка на родительское окно.
Класс
QSystemTrayIcon поддерживает следующие основные методы:
isSystemTrayAvailable()
— возвращает значение
True
, если область уведомлений дос- тупна, и
False
— в противном случае. Метод является статическим;
setIcon(
— устанавливает значок. Задать значок также можно в конструкторе класса;
icon()
— возвращает значок (экземпляр класса
QIcon
);
setContextMenu(
— устанавливает контекстное меню, отображаемое при щелч- ке правой кнопкой мыши на значке;
contextMenu()
— возвращает ссылку на контекстное меню (экземпляр класса
QMenu
);
setToolTip(<Текст>)
— задает текст всплывающей подсказки;
toolTip()
— возвращает текст всплывающей подсказки;
setVisible(<Флаг>)
— если в качестве параметра указано значение
True
, значок будет выведен на экран, а если
False
— то скрыт. Метод является слотом;
show()
— отображает значок. Метод является слотом;
hide()
— скрывает значок. Метод является слотом;
isVisible()
— возвращает значение
True
, если значок присутствует на экране, и
False
— в противном случае;
geometry()
— возвращает экземпляр класса
QRect с размерами и координатами значка на экране;
showMessage()
— позволяет отобразить сообщение в области уведомлений. Форматы метода: showMessage(<Заголовок>, <Текст сообщения>[, icon=Information][, msecs=10000]) showMessage(<Заголовок>, <Текст сообщения>,
Глава 27. Создание SDI- и MDI-приложений
673
В первом формате необязательный параметр icon задает значок, который отображается слева от заголовка сообщения. В качестве значения можно указать атрибуты
NoIcon
,
Information
,
Warning или
Critical класса
QSystemTrayIcon
Во втором формате, поддерживаемом, начиная с PyQt 5.9, третьим параметром, можно указать произвольный значок.
Необязательный параметр msecs задает промежуток времени, в течение которого сооб- щение будет присутствовать на экране. Обратите внимание, что сообщение может не показываться вообще, кроме того, значение параметра msecs в некоторых операционных системах игнорируется.
Метод является слотом;
supportsMessages()
— возвращает значение
True
, если поддерживается вывод сообще- ний, и
False
— в противном случае. Метод является статическим.
Класс
QSystemTrayIcon поддерживает следующие сигналы:
activated(<Причина>)
— генерируется при щелчке мышью на значке. Внутри обработ- чика через параметр доступна причина в виде целочисленного значения одного из сле- дующих атрибутов класса
QSystemTrayIcon
:
•
Unknown
—
0
— неизвестная причина;
•
Context
—
1
— нажата правая кнопка мыши;
•
DoubleClick
—
2
— двойной щелчок мышью;
•
Trigger
—
3
— нажата левая кнопка мыши;
•
MiddleClick
—
4
— нажата средняя кнопка мыши;
messageClicked()
— генерируется при щелчке мышью на сообщении.
ГЛ А В А
28
Мультимедиа
Библиотека PyQt 5 предоставляет развитые средства воспроизведения звука и видео. Для этого она задействует мультимедийную подсистему Windows Media Foundation, входящую в состав Windows. Следовательно, все форматы, поддерживаемые операционной системой, будут гарантированно поддерживаться и PyQt 5.
Воспроизведение звука обеспечивает класс
QMediaPlayer
, реализующий полноценный муль- тимедийный проигрыватель (но, к сожалению, без какого бы то ни было пользовательского интерфейса). Чтобы воспроизвести видео, в дополнение к классу
QMediaPlayer следует ис- пользовать класс
QVideoWidget
, который реализует панель для вывода собственно видео.
Класс
QMediaPlaylist обеспечивает функциональность списков воспроизведения (плейли- стов). Класс
QAudioRecorder позволяет записывать аудио с микрофона и сохранять в файле.
А класс
QSoundEffect
— наилучший выбор в случае, если необходимо воспроизвести эффект — короткий звуковой фрагмент, например, в качестве оповещения о каком-либо событии.
Все описанные в этой главе классы объявлены в модуле
QtMultimedia
, если не указано иное.
28.1. Класс QMediaPlayer
Класс
QMediaPlayer реализует полнофункциональный мультимедийный проигрыватель, позволяющий воспроизводить как звук, так и видео из файлов и сетевых источников. Един- ственный его недостаток заключается в том, что он не предоставляет никакого интерфейса для управления воспроизведением: ни кнопок запуска, остановки и паузы, ни регулятора громкости, ни индикатора текущей позиции воспроизведения. Все это нам придется делать самим.
Иерархия наследования для класса
QMediaPlayer выглядит так:
QObject – QMediaObject – QMediaPlayer
А формат вызова его конструктора таков:
<Объект> = QMediaPlayer([parent=None][, flags=0])
В параметре parent может быть указана ссылка на родительский компонент. Параметр flags позволяет указать дополнительные настройки проигрывателя и должен быть задан в виде одного из значений следующих атрибутов класса
QMediaPlayer или их комбинации через оператор
|
:
Глава 28. Мультимедиа
675
LowLatency
—
1
— воспроизведение должно начаться с минимальной задержкой. Ис- пользуется при воспроизведении мультимедиа, закодированного в относительно про- стых форматах (например, звук PCM, сохраненный в файле WAV);
StreamPlayback
—
2
— настраивает проигрыватель для воспроизведения потокового мультимедиа;
VideoSurface
—
4
— настраивает проигрыватель для использования вместе с обработчи- ками мультимедиа (создание таких обработчиков описано в документации).
Класс
QMediaPlayer поддерживает следующие наиболее полезные для нас методы (полный их список можно найти на странице https://doc.qt.io/qt-5/qmediaplayer.html):
setMedia(
— задает источник (мультимедийный файл или сетевой ресурс) для воспроизведения. Источник указывается в виде экземпляра класса
QMediaContent
. Если передать значение
None
, заданный ранее источник будет выгружен.
Примеры задания источника-файла: mp = QtMultimedia.QMediaPlayer() mc = QtMultimedia.QMediaContent(QtCore.QUrl.fromLocalFile(r"c:\media\song1.mp3")) mp.setMedia(mc)
Пример задания сетевого источника: mp.setMedia(QtCore.QUrl(r"http://www.someradio.ru/playlist.m3u8"))
Метод является слотом;
media()
— возвращает заданный источник (экземпляр класса
QMediaContent
);
setPlaylist(
— задает в качестве источника плейлист (экземпляр класса
QMediaPlaylist
). Если передать значение
None
, заданный ранее плейлист будет выгружен. Метод является слотом;
playlist()
— возвращает заданный плейлист (экземпляр класса
QMediaPlaylist
);
currentMedia()
— возвращает текущий источник мультимедиа. Если был задан один источник вызовом метода setMedia()
, возвращаемое значение то же, что и у метода media()
. Если был задан плейлист, возвращает позицию плейлиста, воспроизводящуюся в текущий момент. В любом случае возвращаемое значение — экземпляр класса
QMediaContent
;
play()
— начинает или возобновляет воспроизведение мультимедиа. Метод является слотом;
stop()
— останавливает воспроизведение мультимедиа и перемещает позицию воспро- изведения на начало. Метод является слотом;
pause()
— приостанавливает воспроизведение мультимедиа. Метод является слотом;
state()
— возвращает текущее состояние проигрывателя в виде значения одного из сле- дующих атрибутов класса
QMediaPlayer
:
•
StoppedState
—
0
— воспроизведение либо остановлено, либо еще не начиналось;
•
PlayingState
—
1
— идет воспроизведение;
•
PausedState
—
2
— воспроизведение поставлено на паузу;
duration()
— возвращает продолжительность воспроизведения мультимедиа в миллисе- кундах;