ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов
Скачать 7.92 Mb.
|
) 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( Второй формат позволяет дополнительно указать значок, представленный экземпляром класса 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) |