ээдд. Прохоренок_Н_А__Дронов_В_А_Python_3_и_PyQt_5_Разработка_приложен. Николай Прохоренок Владимир Дронов
Скачать 7.92 Mb.
|
— задает форматированный текст в виде HTML-кода; toHtml() — возвращает форматированный текст в виде HTML-кода; setFont( — устанавливает шрифт; font() — возвращает описывающий установленный шрифт экземпляр класса QFont ; setDefaultTextColor( — задает цвет текста по умолчанию; defaultTextColor() — возвращает цвет текста по умолчанию; setTextWidth(<Ширина>) — задает предпочитаемую ширину строки. Если текст не поме- щается в установленную ширину, он будет перенесен на новую строку; textWidth() — возвращает предпочитаемую ширину текста; setDocument( — задает объект документа в виде экземпляра класса QTextDocument (см. разд. 21.6.4); document() — возвращает ссылку на объект документа (экземпляр класса QTextDocument ; см. разд. 21.6.4); setTextCursor( — устанавливает объект курсора в виде экземпляра клас- са QTextCursor (см. разд. 21.6.5); textCursor() — возвращает объект курсора (экземпляр класса QtextCursor — см. разд. 21.6.5); setTextInteractionFlags(<Режим>) — задает режим взаимодействия пользователя с тек- стом. По умолчанию используется режим NoTextInteraction , при котором пользователь не может взаимодействовать с текстом. Допустимые режимы приведены в разд. 21.1 (см. описание метода setTextInteractionFlags() ); setTabChangesFocus(<Флаг>) — если в качестве параметра указано значение False , то нажатием клавиши True , клавиша setOpenExternalLinks(<Флаг>) — если в качестве параметра указано значение True , щелчок на гиперссылке приведет к открытию браузера, используемого в системе по умолчанию, и загрузке страницы с указанным в гиперссылке URL-адресом. Метод рабо- тает только при использовании режима TextBrowserInteraction Глава 25. Графическая сцена 603 Класс QGraphicsTextItem поддерживает следующие сигналы: linkActivated( — генерируется при переходе по гиперссылке. Через параметр внутри обработчика доступен URL-адрес гиперссылки в виде строки; linkHovered( — генерируется при наведении указателя мыши на гиперссылку. Через параметр внутри обработчика доступен URL-адрес гиперссылки в виде строки. 25.5. Группировка объектов Объединить несколько объектов в группу позволяет класс QGraphicsItemGroup . Над сгруп- пированными объектами можно выполнять различные преобразования, например пере- мещать или поворачивать их одновременно. Иерархия наследования для класса QGraphicsItemGroup выглядит так: QGraphicsItem — QGraphicsItemGroup Формат конструктора класса: <Объект> = QGraphicsItemGroup([parent=None]) В параметре parent можно указать ссылку на родительский объект. Класс QGraphicsItemGroup наследует все методы класса QGraphicsItem и поддерживает сле- дующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicsitemgroup.html): addToGroup( — добавляет объект в группу; removeFromGroup( — удаляет объект из группы. Создать группу и добавить ее на сцену можно и с помощью метода createItemGroup( <Список с объектами>) класса QGraphicsScene . Метод возвращает ссылку на группу (экзем- пляр класса QGraphicsItemGroup ). Удалить группу со сцены позволяет метод destroyItemGroup( класса QGraphicsScene Добавить объект в группу позволяет также метод setGroup( класса QGraphicsItem . Получить ссылку на группу, в которой находится объект, можно вызовом метода group() класса QGraphicsItem . Если объект не находится ни в какой группе, метод возвращает None 25.6. Эффекты К графическим объектам можно применить различные эффекты, например изменение про- зрачности или цвета, отображение тени или размытие. Наследуя класс QGraphicsEffect и переопределяя в нем метод draw() , можно создать свой эффект. Для установки эффекта и получения ссылки на него предназначены следующие методы класса QGraphicsItem : setGraphicsEffect( — задает эффект; graphicsEffect() — возвращает ссылку на эффект или значение None , если эффект не был установлен. 604 Часть II. Библиотека PyQt 5 25.6.1. Класс QGraphicsEffect Класс QGraphicsEffect является базовым классом для всех эффектов. Иерархия наследова- ния выглядит так: QObject — QGraphicsEffect Формат конструктора класса: QGraphicsEffect([parent=None]) Класс QGraphicsEffect поддерживает следующие основные методы (полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicseffect.html): draw(self, — собственно рисует эффект. Этот абстрактный метод должен быть переопределен в производных классах; setEnabled(<Флаг>) — если в качестве параметра указано значение False , эффект от- ключается. Значение True разрешает использование эффекта. Метод является слотом; isEnabled() — возвращает значение True , если эффект включен, и False — в противном случае; update() — вызывает перерисовку эффекта. Метод является слотом. Класс QGraphicsEffect поддерживает сигнал enabledChanged(<Флаг>) , который генерирует- ся при изменении статуса эффекта. Внутри обработчика через параметр доступно значение True , если эффект включен, и False — в противном случае. 25.6.2. Тень Класс QGraphicsDropShadowEffect реализует вывод тени у объекта. Иерархия наследования: QObject — QGraphicsEffect — QGraphicsDropShadowEffect Формат конструктора класса: <Объект> = QGraphicsDropShadowEffect([parent=None]) Класс QGraphicsDropShadowEffect наследует все методы базовых классов и поддерживает следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicsdropshadoweffect.html): setColor( — задает цвет тени. По умолчанию используется полупрозрачный темно-серый цвет ( QColor(63, 63, 63, 180) ). Метод является слотом; color() — возвращает цвет тени (экземпляр класса QColor ); setBlurRadius(<Значение>) — задает радиус размытия тени в виде вещественного числа. Метод является слотом; blurRadius() — возвращает радиус размытия тени; setOffset() — задает смещение тени. Форматы метода: setOffset(<По оси X>, <По оси Y>) setOffset(<Смещение по обеим осям>) setOffset( Второй конструктор задает смещение сразу по обеим осям координат. В первом и втором конструкторах параметры задаются вещественными числами. Метод является слотом; Глава 25. Графическая сцена 605 offset() — возвращает смещение тени в виде экземпляра класса QPointF ; setXOffset(<Смещение>) — задает смещение по оси X в виде вещественного числа. Метод является слотом; xOffset() — возвращает смещение по оси X ; setYOffset(<Смещение>) — задает смещение по оси Y в виде вещественного числа. Метод является слотом; yOffset() — возвращает смещение по оси Y Класс QGraphicsDropShadowEffect поддерживает сигналы: colorChanged( — генерируется при изменении цвета тени. Внутри обработчика через параметр доступен новый цвет; blurRadiusChanged(<Радиус размытия>) — генерируется при изменении радиуса размы- тия. Внутри обработчика через параметр доступно новое значение в виде вещественного числа; offsetChanged( — генерируется при изменении смещения. Внутри обработ- чика через параметр доступно новое значение. 25.6.3. Размытие Класс QGraphicsBlurEffect реализует эффект размытия. Иерархия наследования: QObject — QGraphicsEffect — QGraphicsBlurEffect Формат конструктора класса: <Объект> = QGraphicsBlurEffect([parent=None]) Класс QGraphicsBlurEffect наследует все методы из базовых классов и поддерживает сле- дующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicsblureffect.html): setBlurRadius(<Значение>) — задает радиус размытия в виде вещественного числа. Ме- тод является слотом; blurRadius() — возвращает радиус размытия. Класс QGraphicsBlurEffect поддерживает сигнал blurRadiusChanged(<Радиус размытия>) , который генерируется при изменении радиуса размытия. Внутри обработчика через пара- метр доступно новое значение в виде вещественного числа. 25.6.4. Изменение цвета Класс QGraphicsColorizeEffect реализует эффект изменения цвета. Иерархия наследования: QObject — QGraphicsEffect — QGraphicsColorizeEffect Формат конструктора класса: <Объект> = QGraphicsColorizeEffect([parent=None]) Класс QGraphicsColorizeEffect наследует все методы из базовых классов и поддерживает следующие методы (здесь приведены только основные — полный их список можно найти на странице https://doc.qt.io/qt-5/qgraphicscolorizeeffect.html): setColor( — задает цвет. По умолчанию используется светло-синий цвет ( QColor(0, 0, 192, 255) ). Метод является слотом; 606 Часть II. Библиотека PyQt 5 color() — возвращает текущий цвет в виде экземпляра класса QColor ; setStrength(<Значение>) — задает интенсивность цвета. В качестве значения указыва- ется вещественное число от 0.0 до 1.0 (значение по умолчанию). Метод является сло- том; strength() — возвращает интенсивность цвета. Класс QGraphicsColorizeEffect поддерживает сигналы: colorChanged( — генерируется при изменении цвета. Внутри обработчика через параметр доступен новый цвет; strengthChanged(<Интенсивность>) — генерируется при изменении интенсивности цве- та. Внутри обработчика через параметр доступно новое значение в виде вещественного числа. 25.6.5. Изменение прозрачности Класс QGraphicsOpacityEffect реализует эффект прозрачности. Иерархия наследования: QObject — QGraphicsEffect — QGraphicsOpacityEffect Формат конструктора класса: <Объект> = QGraphicsOpacityEffect([parent=None]) Класс QGraphicsOpacityEffect наследует все методы базовых классов и поддерживает сле- дующие методы (здесь приведены только самые полезные — полный их список можно най- ти на странице https://doc.qt.io/qt-5/qgraphicsopacityeffect.html): setOpacity(<Значение>) — задает степень прозрачности. В качестве значения указыва- ется вещественное число от 0.0 до 1.0 . По умолчанию используется значение 0.7 . Метод является слотом; opacity() — возвращает степень прозрачности; setOpacityMask( — задает маску. Метод является слотом; opacityMask() — возвращает маску в виде экземпляра класса QBrush Класс QGraphicsOpacityEffect поддерживает следующие сигналы: opacityChanged(<Прозрачность>) — генерируется при изменении степени прозрачности. Внутри обработчика через параметр доступно новое значение в виде вещественного числа; opacityMaskChanged( — генерируется при изменении маски. Через параметр доступна новая маска. 25.7. Обработка событий Все происходящие в графических объектах события изначально возникают в компоненте- представлении. Компонент-представление преобразует их и передает объекту сцены, кото- рый, в свою очередь, перенаправляет их объекту, способному обработать возникшее собы- тие (так, щелчок мыши передается объекту, который расположен по координатам щелчка). Обработка событий в представлении ничем не отличается от обычной обработки событий, рассмотренной в главе 19. Однако обработка событий в графическом объекте имеет свои особенности, которые мы и рассмотрим в этом разделе. Глава 25. Графическая сцена 607 25.7.1. События клавиатуры При обработке событий клавиатуры следует учитывать, что: графический объект должен иметь возможность принимать фокус ввода. Для этого не- обходимо установить флаг ItemIsFocusable , например, с помощью метода setFlag() класса QGraphicsItem ; объект должен быть в фокусе ввода. Методы, позволяющие управлять фокусом ввода, мы рассматривали в разд. 25.1.5 и 25.3.1; чтобы захватить эксклюзивный ввод с клавиатуры, следует вызвать у графического объекта метод grabKeyboard() , а чтобы освободить ввод — метод ungrabKeyboard() ; можно перехватить нажатие любых клавиш, кроме если событие обработано, нужно вызвать метод accept() у объекта события, в против- ном случае — метод ignore() Для обработки событий клавиатуры следует наследовать класс, реализующий графический объект, и переопределить в нем методы: focusInEvent(self, — вызывается при получении фокуса ввода. Через пара- метр доступен экземпляр класса QFocusEvent (см. разд. 19.8.1); focusOutEvent(self, — вызывается при потере фокуса ввода. Через параметр доступен экземпляр класса QFocusEvent (см. разд. 19.8.1); keyPressEvent(self, — вызывается при нажатии клавиши на клавиатуре. Если клавишу удерживать нажатой, метод будет вызываться постоянно, пока ее не отпустят. Через параметр доступен экземпляр класса QKeyEvent (см. разд. 19.8.3); keyReleaseEvent(self, — вызывается при отпускании нажатой ранее клавиши. Через параметр доступен экземпляр класса QKeyEvent (см. разд. 19.8.3). С помощью метода setFocusProxy( класса QGraphicsItem можно указать объект, который будет обрабатывать события клавиатуры вместо текущего объекта. Полу- чить ссылку на назначенный ранее объект-обработчик событий клавиатуры позволяет метод focusProxy() 25.7.2. События мыши Для обработки нажатия кнопки мыши и перемещения мыши следует наследовать класс, реализующий графический объект, и переопределить в нем такие методы: mousePressEvent(self, — вызывается при нажатии кнопки мыши над объек- том. Через параметр доступен экземпляр класса QGraphicsSceneMouseEvent . Если событие принято, необходимо вызвать метод accept() объекта события, в противном случае — метод ignore() . Если был вызван метод ignore() , методы mouseReleaseEvent() и mouseMoveEvent() выполнены не будут. С помощью метода setAcceptedMouseButtons(<Кнопки>) класса QGraphicsItem можно указать кнопки, события от которых объект будет принимать. По умолчанию объект принимает события от всех кнопок мыши. Если в параметре <Кнопки> указать атрибут NoButton класса QtCore.Qt , объект вообще не станет принимать события от кнопок мыши; mouseReleaseEvent(self, — вызывается при отпускании ранее нажатой кнопки мыши. Через параметр доступен экземпляр класса QGraphicsSceneMouseEvent ; 608 Часть II. Библиотека PyQt 5 mouseDoubleClickEvent(self, — вызывается при двойном щелчке мышью в области объекта. Через параметр доступен экземпляр класса QgraphicsScene- MouseEvent ; mouseMoveEvent(self, — вызывается при перемещении мыши. Через параметр доступен экземпляр класса QGraphicsSceneMouseEvent Класс QGraphicsSceneMouseEvent наследует все методы классов QGraphicsSceneEvent и QEvent и добавляет поддержку следующих методов: pos() — возвращает экземпляр класса QPointF с координатами указателя мыши в преде- лах области объекта; scenePos() — возвращает экземпляр класса QPointF с координатами указателя мыши в пределах сцены; screenPos() — возвращает экземпляр класса QPoint с координатами указателя мыши в пределах экрана; lastPos() — возвращает экземпляр класса QPointF с координатами последней запом- ненной представлением позиции мыши в пределах области объекта; lastScenePos() — возвращает экземпляр класса QPointF с координатами последней запомненной представлением позиции мыши в пределах сцены; lastScreenPos() — возвращает экземпляр класса QPoint с координатами последней запомненной представлением позиции мыши в пределах экрана; buttonDownPos(<Кнопка>) — возвращает экземпляр класса QPointF с координатами щелчка указанной кнопки мыши в пределах области объекта; buttonDownScenePos(<Кнопка>) — возвращает экземпляр класса QPointF с координатами щелчка указанной кнопки мыши в пределах сцены; buttonDownScreenPos(<Кнопка>) — возвращает экземпляр класса QPoint с координатами щелчка указанной кнопки мыши в пределах экрана; button() — возвращает обозначение кнопки мыши, нажатие которой вызвало событие; buttons() — возвращает комбинацию обозначений всех кнопок мыши, одновременное нажатие которых вызвало событие; modifiers() — возвращает комбинацию обозначений всех клавиш-модификаторов ( По умолчанию событие мыши перехватывает объект, на котором был произведен щелчок мышью. Чтобы перехватывать нажатие и отпускание мыши вне объекта, следует захватить мышь с помощью метода grabMouse() класса QGraphicsItem . Освободить захваченную ранее мышь позволяет метод ungrabMouse() . Получить ссылку на объект, захвативший мышь, можно с помощью метода mouseGrabberItem() класса QGraphicsScene Для обработки прочих событий мыши нужно наследовать класс, реализующий графический объект, и переопределить следующие методы: hoverEnterEvent(self, — вызывается при наведении указателя мыши на область объекта. Через параметр доступен экземпляр класса |