72 lines
2.7 KiB
Python
72 lines
2.7 KiB
Python
|
|
from PySide6.QtCore import (QPropertyAnimation, QSequentialAnimationGroup,
|
|||
|
|
QParallelAnimationGroup, QPoint, QEasingCurve)
|
|||
|
|
from PySide6.QtWidgets import QGraphicsOpacityEffect
|
|||
|
|
|
|||
|
|
class LogoAnimations:
|
|||
|
|
def __init__(self, ui):
|
|||
|
|
self.ui = ui
|
|||
|
|
self.logos = [
|
|||
|
|
ui.vol1bg, ui.vol2bg, ui.vol3bg,
|
|||
|
|
ui.vol4bg, ui.afterbg
|
|||
|
|
]
|
|||
|
|
self.animation_group = None
|
|||
|
|
|
|||
|
|
def initialize(self):
|
|||
|
|
"""初始化所有logo的状态(透明且位于屏幕外)"""
|
|||
|
|
for logo in self.logos:
|
|||
|
|
# 保存原始位置
|
|||
|
|
logo.original_pos = logo.pos()
|
|||
|
|
# 设置透明度效果
|
|||
|
|
opacity_effect = QGraphicsOpacityEffect(logo)
|
|||
|
|
logo.setGraphicsEffect(opacity_effect)
|
|||
|
|
opacity_effect.setOpacity(0)
|
|||
|
|
# 移动到屏幕左侧外
|
|||
|
|
logo.move(-logo.width(), logo.y())
|
|||
|
|
|
|||
|
|
def create_animation_sequence(self):
|
|||
|
|
"""创建顺序动画序列"""
|
|||
|
|
self.animation_group = QSequentialAnimationGroup()
|
|||
|
|
|
|||
|
|
# 为每个logo创建动画(延迟递增)
|
|||
|
|
delays = [0, 50, 100, 150, 200] # 每个动画的延迟时间(ms)
|
|||
|
|
|
|||
|
|
for i, logo in enumerate(self.logos):
|
|||
|
|
# 创建并行动画组(位置+透明度)
|
|||
|
|
parallel_group = QParallelAnimationGroup()
|
|||
|
|
|
|||
|
|
# 位置动画(从左侧滑入)
|
|||
|
|
pos_anim = QPropertyAnimation(logo, b"pos")
|
|||
|
|
pos_anim.setDuration(800)
|
|||
|
|
pos_anim.setStartValue(QPoint(-logo.width(), logo.y()))
|
|||
|
|
pos_anim.setEndValue(logo.original_pos)
|
|||
|
|
pos_anim.setEasingCurve(QEasingCurve.OutBack)
|
|||
|
|
|
|||
|
|
# 透明度动画(淡入)
|
|||
|
|
opacity_anim = QPropertyAnimation(logo.graphicsEffect(), b"opacity")
|
|||
|
|
opacity_anim.setDuration(800)
|
|||
|
|
opacity_anim.setStartValue(0)
|
|||
|
|
opacity_anim.setEndValue(1)
|
|||
|
|
|
|||
|
|
parallel_group.addAnimation(pos_anim)
|
|||
|
|
parallel_group.addAnimation(opacity_anim)
|
|||
|
|
|
|||
|
|
# 添加延迟(使动画按顺序触发)
|
|||
|
|
if delays[i] > 0:
|
|||
|
|
delay_anim = QPropertyAnimation(logo, b"pos")
|
|||
|
|
delay_anim.setDuration(delays[i])
|
|||
|
|
self.animation_group.addAnimation(delay_anim)
|
|||
|
|
|
|||
|
|
self.animation_group.addAnimation(parallel_group)
|
|||
|
|
|
|||
|
|
return self.animation_group
|
|||
|
|
|
|||
|
|
def start_animation(self):
|
|||
|
|
"""启动动画序列"""
|
|||
|
|
self.initialize()
|
|||
|
|
self.create_animation_sequence()
|
|||
|
|
self.animation_group.start()
|
|||
|
|
|
|||
|
|
def stop_animation(self):
|
|||
|
|
"""停止动画"""
|
|||
|
|
if self.animation_group:
|
|||
|
|
self.animation_group.stop()
|