Извините за мой ломаный английский.
Я использую конечный автомат с анимацией. Я хочу реализовать эффект затухания/исчезновения.
state1: opacity = 0 visible = False
state2: opactiy = 1 visible = True
state1 -> state2: переместите виджет снизу вверх, сначала установите для свойства «visible» значение «True», а затем установите «opactiy» от 0,0 до 1,0 за 5 секунд.
state2 --> state1: переместите виджет сверху вниз, его "непрозрачность" изменится с 1,0 на 0,0 за 5 секунд, а затем установите для свойства "видимого" виджета значение False.
Но проблема в том, что когда state2 в state1, он всегда сначала устанавливает для свойства "visible" значение False, поэтому я вижу, что виджет исчезает без эффекта затухания, даже если я использую QSequentialAnimationGroup и сначала устанавливаю opactiy_animation.
Как получить эффект затухания?
Код:
self.group_p = QtCore.QParallelAnimationGroup()
self.group_s = QtCore.QSequentialAnimationGroup()
self.group_sr = QtCore.QSequentialAnimationGroup()
goe = QtGui.QGraphicsOpacityEffect()
self.label_arrow.setGraphicsEffect(goe)
animation_o = QtCore.QPropertyAnimation(goe, "opacity")
animation_g = QtCore.QPropertyAnimation(self.label_arrow, "geometry")
animation_v = QtCore.QPropertyAnimation(self.label_arrow, "visible")
animation_g.setDuration(5000)
animation_g.setEasingCurve(QEasingCurve.OutBounce)
animation_o.setDuration(5000)
self.group_p.addAnimation(animation_g)
self.group_p.addAnimation(animation_o)
self.group_s.addAnimation(self.group_p)
self.group_s.addAnimation(animation_v)
self.group_sr.addAnimation(animation_v)
self.group_sr.addAnimation(self.group_p)
self.machine = QtCore.QStateMachine()
state1 = QState(self.machine)
state2 = QState(self.machine)
self.machine.setInitialState(state1)
state1.assignProperty(self.label_arrow, "geometry", QtCore.QRect(self.label_arrow.x(),\
self.label_arrow.y()+100, self.label_arrow.width(), self.label_arrow.height()))
state1.assignProperty(self.label_arrow, "visible", False)
state1.assignProperty(goe, "opacity", 0.5)
state2.assignProperty(self.label_arrow, "geometry", self.label_arrow.geometry())
state2.assignProperty(self.label_arrow, "visible", True)
state2.assignProperty(goe, "opacity", 1)
transition = state1.addTransition(self.sig_arrow_animate, state2)
transition.addAnimation(self.group_sr)
transition2 = state2.addTransition(self.sig_arrow_animate, state1)
transition2.addAnimation(self.group_s) # set visible to False first!
self.machine.start()