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

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


Скачать 7.92 Mb.
НазваниеНиколай Прохоренок Владимир Дронов
Дата05.05.2023
Размер7.92 Mb.
Формат файлаpdf
Имя файлаПрохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен.pdf
ТипДокументы
#1111379
страница71 из 83
1   ...   67   68   69   70   71   72   73   74   ...   83
) addCategory(<Заголовок>[, items=[]])
Первый формат добавляет категорию, представленную экземпляром класса
QWinJumpListCategory
Второй формат создает категорию с указанным
<Заголовком>
и пунктами, указанными в списке, который передан с параметром items
, — эти пункты должны быть представлены экземплярами класса
QWinJumpListItem
. Если параметр items не указан, создается пустая

Глава 30. Взаимодействие с Windows
731 категория. Созданная категория добавляется в список. В качестве результата метод воз- вращает экземпляр класса
QWinJumpListCategory
, представляющий эту категорию;
 categories()
— возвращает список экземпляров класса
QWinJumpListCategory
, представ- ляющий произвольные категории, которые создаются самим разработчиком приложе- ния;
 clear()
— очищает список быстрого доступа. Метод является слотом;
 setIdentifier(<Идентификатор>)
— задает для списка быстрого доступа уникальный идентификатор, указываемый в виде строки, которая не должна включать пробелы и превышать в длину 128 символов. Если указана пустая строка (это значение по умолча- нию), будет использован идентификатор, сгенерированный самой системой;
 identifier()
— возвращает уникальный идентификатор, заданный для списка быстрого доступа.
30.2.2. Класс QWinJumpListCategory
Класс
QWinJumpListCategory представляет категорию списка быстрого доступа. Формат его конструктора:
<Объект> = QWinJumpListCategory([<Заголовок>])
В параметре можно сразу же указать заголовок создаваемой категории.
Класс
QWinJumpListCategory поддерживает следующие методы:
 addItem()
— добавляет в категорию пункт, представленный экземп- ляром класса
QWinJumpListItem
;
 addDestination(<Путь к файлу>)
— добавляет в категорию пункт, указывающий на файл, чей
<Путь>
передан с параметром. В качестве названия пункта использует имя файла из этого параметра. Возвращает экземпляр класса
QWinJumpListItem
, представ- ляющий созданный пункт. Этот метод используется для создания пунктов, открываю- щих какие-либо документы в текущем приложении;
В
НИМАНИЕ
!
Чтобы пункты такого типа отображались в списке быстрого доступа, следует зарегистриро- вать их расширение, как обрабатываемое этим приложением.
 addLink()
— добавляет в категорию пункт с заданным параметром
<Заголовок>
, указы- вающий на приложение,
<Путь>
к исполняемому файлу которого передан с параметром.
Форматы метода: addLink(<Заголовок>, <Путь к файлу>[, arguments=[]]) addLink(, <Заголовок>, <Путь к файлу>[, arguments=[]])
Второй формат позволяет дополнительно указать значок, представленный экземпляром класса
QIcon
, который будет помечать создаваемый пункт.
Дополнительно в параметре arguments можно указать список строковых параметров ко- мандной строки, которые будут переданы исполняемому файлу, указанному в параметре
<Путь к файлу>
, при его запуске.
Метод возвращает экземпляр класса
QWinJumpListItem
, представляющий созданный пункт;

732
Часть II. Библиотека PyQt 5
 addSeparator()
— добавляет в категорию разделитель и возвращает представляющий его экземпляр класса
QWinJumpListItem
. Добавлять разделители можно только в катего- рию задач;
 clear()
— очищает категорию;
 items()
— возвращает список пунктов (экземпляров класса
QWinJumpListItem
), имею- щихся в категории;
 count()
— возвращает количество пунктов, содержащихся в категории;
 isEmpty()
— возвращает
True
, если категория пуста, т. е. не содержит пунктов, и
False
— в противном случае;
 setTitle(<Заголовок>)
— задает заголовок категории;
 title()
— возвращает заголовок категории;
 setVisible(<Флаг>)
— если передать значение
False
, категория не будет выводиться на экран. Чтобы вывести ее, нужно передать значение
True
;
В
НИМАНИЕ
!
Рекомендуется явно делать видимой каждую категорию, в которую будут программно до- бавляться пункты.
 isVisible()
— возвращает
True
, если категория выводится на экран, и
False
, если она скрыта;
 type()
— возвращает тип категории в виде одного из следующих атрибутов класса
QWinJumpListCategory
:

Recent

1
— стандартная категория недавно открывавшихся документов;

Frequent

2
— стандартная категория часто открываемых документов;

Tasks

3
— стандартная категория задач;

Custom

0
— произвольная, т. е. созданная самим разработчиком, категория.
30.2.3. Класс QWinJumpListItem
Класс
QWinJumpListItem представляет отдельный пункт в списке быстрого доступа. Формат его конструктора:
<Объект> = QWinJumpListItem(<Тип>)
Единственным параметром методу передается тип создаваемого пункта в виде одного из следующих атрибутов класса
QWinJumpListItem
:

Destination

0
— пункт, указывающий на файл с документом (пункт такого типа так- же можно создать вызовом метода addDestination()
класса
QWinJumpListCategory
);

Link

1
— пункт, указывающий на приложение (однотипный пункт создается вызовом метода addLink()
класса
QWinJumpListCategory
);

Separator

2
— разделитель.
Класс
QWinJumpListItem поддерживает следующие методы:
 setFilePath(<Путь к файлу>)
— задает для пункта в параметре
<Путь к файлу>
: либо путь к документу (для пункта с типом
Destination
), либо путь к исполняемому файлу
(для пункта типа
Link
);

Глава 30. Взаимодействие с Windows
733
 filePath()
— возвращает путь к файлу, заданный для пункта;
 setTitle(<Название>)
— задает
<Название>
для пункта с типом
Link
;
 title()
— возвращает название пункта с типом
Link
;
 setIcon()
— задает значок (экземпляр класса
QIcon
) для пункта с типом
Link
;
 icon()
— возвращает значок, представленный экземпляром класса
QIcon
, который был задан у пункта с типом
Link
;
 setArguments(<Список аргументов>)
— задает аргументы командной строки, указывае- мые в виде списка строк, для пункта с типом
Link
;
 arguments()
— возвращает список аргументов командной строки, указанных для пункта с типом
Link
;
 setWorkingDirectory(<Путь к каталогу>)
— задает путь к рабочему каталогу для пункта с типом
Link
;
 workingDirectory()
— возвращает путь к рабочему каталогу у пункта с типом
Link
;
 setDescription(<Описание>)
— задает текстовое
<Описание>
для пункта с типом
Link
;
 description()
— возвращает текстовое описание пункта с типом
Link
;
 setType(<Тип>)
— устанавливает другой
<Тип>
для пункта. В качестве параметра
<Тип>
передается один из указанных ранее атрибутов класса
QWinJumpListItem
;
 type()
— возвращает обозначение типа пункта.
Листинг 30.3 показывает код программы, которая формирует список быстрого доступа и добавляет в него следующие пункты:
 в категории последних открывавшихся докумен- тов — пункт, указывающий на файл с текстом ли- цензии Python;
 в категории часто открываемых документов
— пункт, указывающий на файл со списком нововве- дений, появившихся в разных версиях Python;
 в категории задач — пункты, запускающие стан- дартные программы Блокнот и Write и отделенные друг от друга разделителем;
 во вновь созданной произвольной категории Инст- рументы — пункт, запускающий среду Python
Shell.
Список быстрого доступа, созданный программой, показан на рис. 30.2.
Рис. 30.2. Список быстрого доступа

734
Часть II. Библиотека PyQt 5
Листинг 30.3. Формирование списка быстрого доступа from PyQt5 import QtCore, QtWidgets, QtWinExtras import sys, time class MyWindow(QtWidgets.QWidget): def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent, flags=QtCore.Qt.Window |
QtCore.Qt.MSWindowsFixedSizeDialogHint) self.setWindowTitle("Список быстрого доступа")
# Создаем сам список быстрого доступа и очищаем его jumpList = QtWinExtras.QWinJumpList(parent=self) jumpList.clear()
# Получаем категорию последних открывавшихся документоов recent = jumpList.recent()
# Создаем пункт "Лицензия Python" и добавляем его в эту категорию item1 = QtWinExtras.QWinJumpListItem(
QtWinExtras.QWinJumpListItem.Link) item1.setFilePath(r"C:\Windows\notepad.exe") item1.setTitle("Лицензия Python") item1.setArguments([r"C:/Python36/LICENSE.txt"]) recent.addItem(item1)
# Делаем категорию видимой recent.setVisible(True)
# Получаем категорию часто открываемых документов, добавляем в
# нее пункт "Новости Python" и делаем видимой frequent = jumpList.frequent() frequent.addLink("Новости Python", r"C:\Python36\NEWS.txt") frequent.setVisible(True)
# Получаем категорию задач, добавляем в нее пункт "Блокнот",
# разделитель, пункт "Write" и делаем видимой tasks = jumpList.tasks() tasks.addLink("Блокнот", r"C:\Windows\notepad.exe") tasks.addSeparator() tasks.addLink("Write", r"C:\Windows\write.exe") tasks.setVisible(True)
# Создаем произвольную категорию "Инструменты" otherCat = QtWinExtras.QWinJumpListCategory() otherCat.setTitle("Инструменты")
# Добавляем в нее пункт "Python" и также делаем видимой otherCat.addLink("Python Shell", r"C:\Python36\pythonw.exe") otherCat.setVisible(True) jumpList.addCategory(otherCat) self.resize(200, 50) app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())

Глава 30. Взаимодействие с Windows
735
Здесь хорошо заметна непонятная особенность либо самих списков быстрого доступа, либо их реализации в PyQt: при добавлении нового пункта в категорию недавно открывавшихся документов этот же пункт появляется и в категории часто открываемых документов, и на- оборот. Поэтому имеет смысл выводить в списке быстрого доступа какую-либо одну из этих двух категорий.
30.3. Панели инструментов, выводящиеся на миниатюрах
При наведении курсора мыши на кнопку, находящуюся в панели задач и представляющую запущенное приложение, на экране появляется небольшая миниатюра окна этого приложе- ния. PyQt позволяет создать на нижней границе такой миниатюры небольшую панель инст- рументов с кнопками, посредством которых можно управлять запущенным приложением.
Функциональность таких панелей инструментов реализуют два класса PyQt:
QWinThumbnailToolBar и
QWinThumbnailToolButton
. Первый класс создает саму панель инст- рументов, а второй — отдельную кнопку на ней.
30.3.1. Класс QWinThumbnailToolBar
Класс
QWinThumbnailToolBar представляет саму инструментальную панель, выводящуюся на нижней границе миниатюры. Конструктор этого класса вызывается следующим образом:
<Объект> = QWinThumbnailToolBar([parent=None])
В параметре parent можно указать родительский компонент.
Класс
QWinThumbnailToolBar поддерживает следующий набор методов, применяемых для формирования панели инструментов:
 setWindow()
— задает окно (экземпляр класса
QWindow
), на миниатюре которо- го должна выводиться панель инструментов.
Получить экземпляр упомянутого ранее класса, представляющий окно, можно вызовом метода windowHandle()
класса
QWidget
. Однако здесь нужно иметь в виду, что этот метод способен вернуть корректное значение лишь после вывода окна на экран. Поэтому метод setWindow панели инструментов следует вызывать внутри переопределенного метода showEvent()
(за подробностями — к разд. 19.7.1): class MyWindow(QtWidgets.QWidget): def __init__(self, parent=None): self.thumbnailToolbar =

QtWinExtras.QWinThumbnailToolBar(parent=self) def showEvent(self, evt): self.thumbnailToolbar.setWindow(self.windowHandle())
 window()
— возвращает экземпляр класса
QWindow
, представляющий окно, с которым связана панель инструментов;
 addButton()
— добавляет в панель инструментов кнопку, представленную экземпляром класса
QWinThumbnailToolButton
;

736
Часть II. Библиотека PyQt 5
В
НИМАНИЕ
!
На панели инструментов, выводящейся при миниатюре окна, может присутствовать не более семи кнопок.
 setButtons(<Список кнопок>)
помещает на панель инструментов кнопки, указанные
(в виде экземпляров класса
QWinThumbnailToolButton
) в параметре
<Список кнопок>
Кнопки, присутствовавшие ранее в панели инструментов, будут удалены;
 removeButton()
— удаляет указанную (в виде экземпляра класса
QWinThumbnailToolButton
) кнопку из панели инструментов;
 clear()
— очищает панель инструментов. Метод является слотом;
 buttons()
— возвращает список кнопок (экземпляров класса
QWinThumbnailToolButton
), имеющихся на панели инструментов;
 count()
— возвращает количество кнопок, имеющихся на панели инструментов.
30.3.2. Класс QWinThumbnailToolButton
Класс
QWinThumbnailToolButton представляет отдельную кнопку, присутствующую на пане- ли инструментов в миниатюре окна. Вот формат вызова его конструктора:
<Объект> = QWinThumbnailToolBar([parent=None])
Необязательный параметр parent служит для задания родителя кнопки.
Класс
QWinThumbnailToolButton поддерживает все необходимые для создания кнопки методы:
 setIcon()
— устанавливает на кнопку значок, заданный в виде экземпляра клас- са
QIcon
;
 icon()
— возвращает экземпляр класса
QIcon
, представляющий установленный на кноп- ку значок;
 setToolTip(<Текст подсказки>)
— задает для кнопки текст всплывающей подсказки;
 toolTip()
— возвращает заданный для кнопки текст всплывающей подсказки;
 setVisible(<Флаг>)
— если передать с параметром значение
False
, кнопка будет скрыта.
Чтобы снова вывести ее на экран, нужно передать значение
True
;
 isVisible()
— возвращает
True
, если кнопка присутствует на экране, и
False
— в про- тивном случае;
 setEnabled(<Флаг>)
— если передать с параметром значение
False
, кнопка станет недос- тупной для нажатия, — при этом она будет закрашена серым цветом. Чтобы вновь сде- лать кнопку доступной, следует передать значение
True
;
 isEnabled()
— возвращает
True
, если кнопка доступна для нажатия, и
False
, если она недоступна и закрашена серым;
 setInteractive(<Флаг>)
— если передать с параметром значение
False
, кнопка станет недоступной для нажатия, но при этом будет отображаться как обычно. Если нужно сде- лать кнопку вновь доступной, следует передать значение
True
;
 isInteractive()
— возвращает
True
, если кнопка доступна для нажатия, и
False
, если она недоступна и отображается как обычно;
 setDismissOnClick(<Флаг>)
— если передать с параметром значение
True
, кнопка после нажатия на нее будет возвращаться в исходное состояние. Если же передать значение

Глава 30. Взаимодействие с Windows
737
False
, кнопка останется в нажатом состоянии и вернется в исходное только после вто- ричного нажатия (поведение по умолчанию);
 dismissOnClick()
— возвращает
True
, если кнопка после нажатия сама возвращается в исходное состояние, и
False
— в противном случае;
 setFlat(<Флаг>)
— если передать с параметром значение
True
, кнопка будет выводиться без рамки и фона — в виде одного лишь значка. Если же передать значение
False
, кноп- ка будет выводиться как обычно (поведение по умолчанию);
 isFlat()
— возвращает
True
, если кнопка выводится без рамки и фона, и
False
— в про- тивном случае;
 click()
— имитирует нажатие кнопки. Если кнопка недоступна для нажатия, ничего не делает. Метод является слотом.
Если требуется создать промежуток между какими-либо кнопками, можно поместить туда кнопку, недоступную для нажатия, без значка, рамки и фона:
# Создаем кнопку, которая должна выводиться левее свободного пространства buttonStart = QtWinExtras.QWinThumbnailToolButton(parent=self) button2.setIcon(iconStart) button2.setToolTip("Пуск") thumbnailToolbar.addButton(buttonStart)
# Конструируем кнопку, которая создаст свободное пространство buttonSpacer = QtWinExtras.QWinThumbnailToolButton(parent=self) buttonSpacer.setInteractive(False) buttonSpacer.setFlat(True) thumbnailToolbar.addButton(buttonSpacer)
# Создаем кнопку, которая должна выводиться правее свободного
# пространства buttonStop = QtWinExtras.QWinThumbnailToolButton(parent=self)
Класс
QWinThumbnailToolButton поддерживает сигнал clicked()
, генерируемый при щелчке на кнопке.
В качестве примера рассмотрим код приложения из листинга 30.4. Оно помещает в панель инструментов на миниатюре три кнопки, из которых первая выводится как обычно, вто- рая — без рамки и фона, а третья не возвращается в исходное состояние самостоятельно
(первые две кнопки возвращаются). Между второй и третьей кнопок присутствует свобод- ное пространство, созданное с помощью недоступной для нажатия кнопки без значка, рамки и фона. Получившуюся панель инструментов можно увидеть на рис. 30.3.
Рис. 30.3. Панель инструментов на миниатюре приложения

738
Часть II. Библиотека PyQt 5
Листинг 30.4. Создание панели инструментов на миниатюре приложения from PyQt5 import QtCore, QtWidgets, QtGui, QtWinExtras import sys class MyWindow(QtWidgets.QWidget): def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent, flags=QtCore.Qt.Window |
QtCore.Qt.MSWindowsFixedSizeDialogHint) self.setWindowTitle("Панель инструментов на миниатюре")
# Создаем значки для кнопок icon1 = QtGui.QIcon("icon3.png") icon2 = QtGui.QIcon("icon4.png") icon3 = QtGui.QIcon("icon5.png")
# Создаем панель инструментов self.thumbnailToolbar = QtWinExtras.QWinThumbnailToolBar( parent=self)
1   ...   67   68   69   70   71   72   73   74   ...   83


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