Уведомления

Группа в Telegram: @pythonsu

#1 Май 2, 2016 20:48:14

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

QPropertyAnimation в PyQt

Не получается сделать так, чтобы цвет текста плавно менялся.
В коде ниже я создаю текст и объект QPropertyAnimation, далее задаю цвета и скорость анимации, после чего начинаю ее делать и ничего не происходит

class MyWindow(QWidget): 
    def __init__(self):
        super().__init__()
        self.lol()
    def lol (self): 
        self.resize(500,300)
        lb = QLabel('ТЕКСТ',self)
        lb.move(100,100)
        effect = QGraphicsColorizeEffect()
        lb.setGraphicsEffect(effect)
        an = QPropertyAnimation(effect, QByteArray().append('color'))
        an.setStartValue((QColor(20,20,10)))
        an.setEndValue((QColor(200,200,10)))
        an.setDuration(200)
        an.start()
if __name__ == '__main__':
    import sys 
    app = QApplication(sys.argv) 
    window = MyWindow() 
    window.show() 
    sys.exit(app.exec_())
Вот не работает и все. Сначала передавал в QPropertyAnimation вот так
QPropertyAnimation(effect,'color')
Но выбивало ошибку
TypeError: arguments did not match any overloaded call:
  QPropertyAnimation(QObject parent=None): too many arguments
  QPropertyAnimation(QObject, QByteArray, QObject parent=None): argument 2 has unexpected type 'str'
Теперь передаю вот так :
an = QPropertyAnimation(effect, QByteArray().append('color'))
Открывается окно, но цвет вообще не изменяется (ничего не анимируется). Танцы с бубнами и все остальное было, а толку нет.
Также к слову хочу сказать, что
effect = QGraphicsColorizeEffect()
        lb.setGraphicsEffect(effect)
в PySide вообще никак не работает. Одинаковый код , который приведен ниже
effect = QGraphicsColorizeEffect()
effect.setColor(QColor(200,200,200)
        lb.setGraphicsEffect(effect)
По-разному отображается в PyQt и PySide, в PyQt меняет цвет текста, в PySide нет, что вообще делать, это баг или я что-то не догоняю ? Пример в чистую взят из книги по Qt, просто перебил его ненмого на python язык.

Отредактировано Lestoroer (Май 2, 2016 20:50:24)

Офлайн

#2 Май 2, 2016 22:45:02

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

QPropertyAnimation в PyQt

Не знаю даже что и сказать. Решил ли я проблему или нет. В общем решил написать программу в процедурном стиле и о боже внимание : Заработало.
Буду шаманить с ООП. У кого какие версии есть почему так произошло, скидываем. Код в принципе одинаковый (некоторые прибаутки с цветом добавил, но суть не меняется).
Моя версия падает на вот этот класс QGraphicsColorizeEffect(), он у меня почему то в ООП не очень хочет работать

app = QApplication(sys.argv) 
w = QWidget()
w.resize(222,222)
vbox = QHBoxLayout()
lb = QLabel()
lb.setPixmap(QPixmap('Маря'))
lb.move(20,20)
vbox.addWidget(lb)
effect = QGraphicsColorizeEffect()
lb.setGraphicsEffect(effect)
an = QPropertyAnimation(effect, b"color")
an.setStartValue(QColor('gray'))
an.setKeyValueAt(0.25, QColor('green'))
an.setKeyValueAt(0.5, QColor('blue'))
an.setKeyValueAt(0.75, QColor('red'))
an.setEndValue(QColor('black'))
an.setDuration(3000)
an.setLoopCount(-1)
an.start()
w.setLayout(vbox)
w.show()
if __name__ == '__main__':
    sys.exit(app.exec_())
/// Добавлено чуть позже
Передал в QGraphicsColorizeEffect(self.lb) картинка стала окрашиваться в PySide, т.е. заработало в PySide. В ООП пока так и не смог сделать

Отредактировано Lestoroer (Май 2, 2016 23:00:11)

Офлайн

#3 Май 2, 2016 23:15:03

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

QPropertyAnimation в PyQt

Госпаде, 4 дня убил на это. Решено :

an = QPropertyAnimation(effect, b"color", self)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version