Съжалявам за счупения ми английски.
Използвам държавна машина с анимации. Искам да внедря ефекта на избледняване/включване.
състояние1: opactiy = 0 видим = False
състояние2: opactiy = 1 видим = вярно
state1 --> state2: Преместете джаджата отдолу нагоре, първо задайте свойството "visible" на True и след това задайте "opactiy" от 0.0 на 1.0 за 5 секунди.
state2 --> state1: Преместете джаджата отгоре надолу, неговата "opactiy" е от 1.0 до 0.0 за 5 секунди и след това задайте свойството "visible" на джаджата на 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()