На этом шаге мы рассмотрим класс, используемый для изменения прозрачности, и перечислим его основные методы.
Класс QGraphicsOpacityEffect реализует эффект прозрачности. Иерархия наследования:
QObject - QGraphicsEffect - QGraphicsOpacityEffect
Формат конструктора класса:
<Объект> = QGraphicsOpacityEffect([parent=None])
Класс QGraphicsOpacityEffect наследует все методы базовых классов и поддерживает следующие методы (здесь приведены только самые полезные - полный их список доступен на странице https://doc.qt.io/qt-5/qgraphicsopacityeffect.html):
Класс QGraphicsOpacityEffect поддерживает следующие сигналы:
В качестве примера изменим программу, приведенную на 231 шаге, заменив имеющиеся два эффекта (тень и размытие) на прозрачность и изменение цвета. Смена новых эффектов происходит также по нажатию клавиши. Текст приложения приведен ниже, результат работы приложения - на рисунке 1.
from PyQt5 import QtGui from PyQt5.QtWidgets import QApplication, QMainWindow, QGraphicsScene, QGraphicsView, QGraphicsItem, QGraphicsPixmapItem, QGraphicsTextItem, QGraphicsEffect, QGraphicsOpacityEffect, QGraphicsColorizeEffect from PyQt5.QtGui import QPixmap, QPainter, QColor from PyQt5.Qt import Qt import sys class Window(QMainWindow): def __init__(self): super().__init__() self.title = "Эффекты" self.top = 200 self.left = 500 self.width = 400 self.height = 400 # Флаг для выбора эффекта self.flag = True self.setWindowTitle(self.title) # Задание местоположения и размера окна self.setGeometry(self.left, self.top, self.width, self.height) # Создание графической сцены self.scene = QGraphicsScene() # Создание инструмента для отрисовки графической сцены self.graphicView = QGraphicsView(self.scene, self) # Задание местоположения и размера графической сцены self.graphicView.setGeometry(0, 0, self.width, self.height) def keyPressEvent(self, event): # Обработчик нажатия клавиш self.flag = not self.flag if self.flag == True: # Задание изменения цвета clr = QGraphicsColorizeEffect() clr.setColor(QColor(140, 50, 255)) # Добавление эффекта к объекту self.image.setGraphicsEffect(clr) else: # Прозрачность и его параметры op = QGraphicsOpacityEffect() op.setOpacity(0.3) # Добавление эффекта к объекту self.image.setGraphicsEffect(op) event.accept() # Завершение обработки события def plot(self): # Создание объекта QPixmap self.picture = QPixmap('IMG2.jpg') # Создание "пустого" объекта QGraphicsPixmapItem self.image = QGraphicsPixmapItem() # Задание изображения в объект QGraphicsPixmapItem self.image.setPixmap(self.picture) # Позиция объекта QGraphicsPixmapItem self.image.setOffset(0, 0) # Добавление объекта QGraphicsPixmapItem на сцену self.scene.addItem(self.image) App = QApplication(sys.argv) window = Window() window.show() # Демонстрация окна window.plot() # Построение и перерисовка окна sys.exit(App.exec())
Рис.1. Смена эффекта по нажатию клавиши
На следующем шаге мы начнем рассматривать обработку событий.