Уведомления

Группа в Telegram: @pythonsu

#1 Май 6, 2016 20:07:24

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Применение эффектов PySide, PyQt

Применяю эффекты с помощью setGraphicsEffect и у меня отображается только прозрачность.
Вот код :

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.window1()
    def window1 (self):
        self.setWindowTitle('Record')
        self.resize(339, 226)
        #Создаем тени
        shadow = QGraphicsDropShadowEffect(self)
        shadow.setColor(QColor(50,200,200))
        shadow.setBlurRadius(30)
        shadow.setOffset(4,-3)
        #Создаем прозрачность
        opacity = QGraphicsOpacityEffect(self)
        opacity.setOpacity(0.6)
        #Создаем текст
        self.label = QLabel('Работай уже, бл', self)
        self.label.setFont(QFont('Times New Roman', 20))
        #Применяем эффект тени и прозрачности
        self.label.setGraphicsEffect(shadow)
        self.label.setGraphicsEffect(opacity)
if __name__ == '__main__':
    import sys 
    app = QApplication(sys.argv) 
    window = Table() 
    window.show()
Как видно из двух последних строчек :
self.label.setGraphicsEffect(shadow)
self.label.setGraphicsEffect(opacity)
Были установлены сначала тени, потом прозрачность, но отображается только прозрачность, так понимаю, код работает таким образом : Сначала устанавливает тень :
self.label.setGraphicsEffect(shadow)
Потом ее же удаляет и устанавливает прозрачность:
self.label.setGraphicsEffect(opacity)
в итоге имеем только прозрачность.
Как обойти это? Как задать несколько эффектов для одного объекта (текста к примеру)?

Отредактировано Lestoroer (Май 6, 2016 20:09:08)

Офлайн

#2 Май 7, 2016 06:40:23

vic57
Зарегистрирован: 2015-07-07
Сообщения: 909
Репутация: +  127  -
Профиль   Отправить e-mail  

Применение эффектов PySide, PyQt

http://it.kgsu.ru/Qt/qt0214.html

Всего доступно четыре эффекта: размытие (blur), расцвечивание (colorization), тень (drop shadow) и непрозрачность (opacity). Каждый из эффектов реализован в отдельном класс
Если четырех эффектов для вас недостаточно, то вы можете реализовать класс собственного эффекта, для этого будет необходимо унаследовать класс QGraphicsEffect и перезаписать метод draw()
2 минуты гугла

Отредактировано vic57 (Май 7, 2016 06:43:07)

Офлайн

#3 Май 7, 2016 09:03:53

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Применение эффектов PySide, PyQt

vic57
http://it.kgsu.ru/Qt/qt0214.html
Это то я понял, что четыре эффекта всего. Они там применили по одному эффекту на одну фотографию. Как несколько то эффектов одновременно приложить на одну фотографию? Допустим, тени и прозрачность хочу.

Отредактировано Lestoroer (Май 7, 2016 09:10:40)

Офлайн

#4 Май 7, 2016 09:06:23

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Применение эффектов PySide, PyQt

Lestoroer
Как вариант, написать свой эффект с блэкджеком и прозрачностью.

Офлайн

#5 Май 7, 2016 09:10:18

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Применение эффектов PySide, PyQt

Firik
LestoroerКак вариант, написать свой эффект с блэкджеком и прозрачностью.
Тоже об этом думаю. Я так понимаю, эти эффекты нельзя совместить, т.к. они одним и тем же методом рисуются, их просто напросто не совместить вместе, один применил,- что-нибудь другое поехало. И как говорили выше, нужно будет draw() переопределять.

Отредактировано Lestoroer (Май 7, 2016 09:13:59)

Офлайн

#6 Май 7, 2016 10:13:19

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Применение эффектов PySide, PyQt

Не претендую на истину, но я бы копал так: если эти эффекты реализуются при помощи шейдеров, то как образец я бы взял шейдер для тени и добавил бы в него возможность установки прозрачности. Например, у тени есть метод setColor(r,g,b). Его стоит переделать в setColor(r,g,b,a), где а- прозрачность. Но это если шейдеры

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version