Как инвертировать анимацию находящуюся внутри группы?
У меня есть две QVariantAnimation засунутые в группу QSequentialAnimationGroup и я пытаюсь инвертировать одну из них. Я пытался это сделать так
self.animation_1 = QtCore.QVariantAnimation()
self.animation_2 = QtCore.QVariantAnimation()
self.animation_1.setDirection(QtCore.QVariantAnimation.Backward)
self.animation_2.setDirection(QtCore.QVariantAnimation.Forward)
self.group = QtCore.QSequentialAnimationGroup(self)
self.group.addAnimation(self.animation_1)
self.group.addAnimation(self.animation_2)
Но не сработало. Я пытался так
self.group.setDirection(QtCore.QVariantAnimation.Backward)
Но инвертируется вся анимация. а мне нужно только инвертировать одну из них . Я пытался сделать это оброщаясь к индексу
self.group.animationAt(0).setDirection(QtCore.QVariantAnimation.Backward)
Ноль реакций. Я также пытался сделать это так
self.group.animationAt(self.group.indexOfAnimation(animation_1)).setDirection(QtCore.QVariantAnimation.Backward)
Все равно не помогло.
Как это сделать?
Мой код
import sys
from PyQt5.QtCore import (QCoreApplication, QMetaObject, QObject, QPoint,
QRect, QSize, QUrl, Qt)
from PyQt5 import QtWidgets
from PyQt5 import QtGui
from PyQt5 import QtCore
from PyQt5.QtCore import QPropertyAnimation, QPoint
from PyQt5.QtWidgets import QGraphicsEffect, QApplication, QWidget, QMainWindow, QVBoxLayout, QLabel
from PyQt5.QtQml import QQmlApplicationEngine
class Main(QtWidgets.QWidget):
def __init__(self):
super().__init__()
#------block------
block = QtWidgets.QWidget(self)
block.setObjectName(u"block")
block.setMinimumSize(QSize(300, 300))
#------CONTENT------
self.block_but = QtWidgets.QWidget(block)
self.block_but.setObjectName(u"block_but")
self.block_but.setGeometry(QRect(110, 20, 111, 111))
move_blur_button_lay = QtWidgets.QVBoxLayout(self.block_but)
move_blur_button_lay.setObjectName(u"move_blur_button_lay")
self.menu_arr = []
radio = QtWidgets.QRadioButton(self.block_but)
radio.setObjectName("mv_radio_but")
radio.toggled.connect(self.menu_animation)
# ---ADD---
move_blur_button_lay.addWidget(radio)
for x in range(2):
# menu
menu = QtWidgets.QWidget(block)
menu.resize(50, 60)
menu._expand = False
# ---ADD---
self.menu_arr.append(menu)
self.menu_arr[0].setStyleSheet('''background:#ff0''')
self.animation= []
for i in range(2):
menuAnimation = QtCore.QVariantAnimation()
menuAnimation.setDuration(500)
menuAnimation.setEasingCurve(QtCore.QEasingCurve.OutQuart)
menuAnimation.setStartValue(QPoint(-20, 10))
menuAnimation.setEndValue(QPoint(0, 10))
self.animation.append(menuAnimation)
self.group = QtCore.QSequentialAnimationGroup(self)
def menu_animation(self):
for c in range(2):
pos1 = QPoint(0 , 0)
pos2 =QPoint(100 , 0)
self.animation[c].setStartValue(pos1)
self.animation[c].setEndValue(pos2)
self.animation[c].setDirection(QtCore.QAbstractAnimation.Backward)
self.animation[c].valueChanged.connect(lambda value, val=c: self.fun(value, val))
self.animation[0].setDirection(QtCore.QVariantAnimation.Backward)
self.animation[1].setDirection(QtCore.QVariantAnimation.Forward)
self.group.addAnimation(self.animation[0])
self.group.addAnimation(self.animation[1])
self.group.start()
def fun(self,value,val=''):
self.menu_arr[val].move(value.x(), 0)
StyleSheet = """
QWidget QWidget,
QWidget QWidget QWidget QWidget,
QWidget QWidget QWidget QWidget QWidget QWidget,
QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#000;
color:#fff;
}
QWidget,
QWidget QWidget QWidget,
QWidget QWidget QWidget QWidget QWidget,
QWidget QWidget QWidget QWidget QWidget QWidget QWidget,
QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget QWidget{
background:#fff;
color:#000;
}
#click_me{
background:#000;
color:#fff;
}
"""
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
app.setStyleSheet(StyleSheet)
w = Main()
w.resize(640, 570) #Size window
w.show()
sys.exit(app.exec_())