awa
This commit is contained in:
117
welcome_video.py
Normal file
117
welcome_video.py
Normal file
@@ -0,0 +1,117 @@
|
||||
from PyQt6.QtCore import Qt, QUrl, pyqtSignal
|
||||
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QPushButton, QHBoxLayout
|
||||
from PyQt6.QtMultimedia import QMediaPlayer
|
||||
from PyQt6.QtMultimediaWidgets import QVideoWidget
|
||||
import os
|
||||
|
||||
class WelcomeVideoPlayer(QWidget):
|
||||
"""欢迎视频播放器,作为可嵌入组件"""
|
||||
videoFinished = pyqtSignal()
|
||||
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
|
||||
# 创建视频播放组件
|
||||
self.video_widget = QVideoWidget()
|
||||
self.media_player = QMediaPlayer()
|
||||
self.media_player.setVideoOutput(self.video_widget)
|
||||
|
||||
# 设置跳过按钮
|
||||
self.skip_button = QPushButton("跳过")
|
||||
# 增强按钮可见性,使用更不透明的背景和更粗的边框
|
||||
self.skip_button.setStyleSheet("""
|
||||
QPushButton {
|
||||
background-color: rgba(0, 0, 0, 0.6);
|
||||
color: white;
|
||||
border: 2px solid white;
|
||||
border-radius: 8px;
|
||||
padding: 8px 20px;
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
}
|
||||
QPushButton:hover {
|
||||
background-color: rgba(0, 0, 0, 0.8);
|
||||
}
|
||||
""")
|
||||
self.skip_button.clicked.connect(self.skip_video)
|
||||
# 确保按钮始终在最上层
|
||||
self.skip_button.raise_()
|
||||
|
||||
# 创建布局
|
||||
self.main_layout = QVBoxLayout(self)
|
||||
self.main_layout.setContentsMargins(0, 0, 0, 0)
|
||||
self.main_layout.setSpacing(0)
|
||||
|
||||
# 将视频组件添加到主布局
|
||||
self.main_layout.addWidget(self.video_widget, 1)
|
||||
|
||||
# 创建底部布局用于放置跳过按钮
|
||||
self.bottom_layout = QHBoxLayout()
|
||||
self.bottom_layout.addStretch()
|
||||
self.bottom_layout.addWidget(self.skip_button)
|
||||
self.bottom_layout.setContentsMargins(0, 0, 20, 30) # 增加底部边距
|
||||
self.bottom_layout.setAlignment(Qt.AlignmentFlag.AlignBottom | Qt.AlignmentFlag.AlignRight)
|
||||
|
||||
# 将底部布局添加到主布局
|
||||
self.main_layout.addLayout(self.bottom_layout, 0)
|
||||
self.setLayout(self.main_layout) # 明确设置布局
|
||||
|
||||
# 连接信号
|
||||
self.media_player.positionChanged.connect(self.check_position)
|
||||
self.media_player.mediaStatusChanged.connect(self.media_status_changed)
|
||||
|
||||
# 初始隐藏
|
||||
self.hide()
|
||||
|
||||
def load_video(self):
|
||||
"""加载欢迎视频"""
|
||||
video_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "_internal", "start.mp4")
|
||||
if os.path.exists(video_path):
|
||||
self.media_player.setSource(QUrl.fromLocalFile(video_path))
|
||||
self.media_player.play()
|
||||
else:
|
||||
print(f"视频文件不存在: {video_path}")
|
||||
self.videoFinished.emit()
|
||||
|
||||
def load_video(self):
|
||||
"""加载欢迎视频"""
|
||||
video_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), "_internal", "start.mp4")
|
||||
if os.path.exists(video_path):
|
||||
self.media_player.setSource(QUrl.fromLocalFile(video_path))
|
||||
self.media_player.play()
|
||||
else:
|
||||
print(f"视频文件不存在: {video_path}")
|
||||
self.videoFinished.emit()
|
||||
|
||||
def check_position(self, position):
|
||||
"""检查视频播放进度"""
|
||||
if self.media_player.duration() > 0 and position >= self.media_player.duration() - 1000: # 接近结束时
|
||||
self.videoFinished.emit()
|
||||
|
||||
def media_status_changed(self, status):
|
||||
"""媒体状态变化处理"""
|
||||
from PyQt6.QtMultimedia import QMediaPlayer
|
||||
if status == QMediaPlayer.MediaStatus.EndOfMedia:
|
||||
self.videoFinished.emit()
|
||||
|
||||
def skip_video(self):
|
||||
"""跳过视频"""
|
||||
self.media_player.stop()
|
||||
self.videoFinished.emit()
|
||||
|
||||
def start_playback(self):
|
||||
"""开始播放视频"""
|
||||
self.load_video()
|
||||
self.show()
|
||||
# 确保按钮在播放时也在顶层
|
||||
self.skip_button.raise_()
|
||||
|
||||
def stop_playback(self):
|
||||
"""停止播放视频"""
|
||||
self.media_player.stop()
|
||||
self.hide()
|
||||
|
||||
def closeEvent(self, event):
|
||||
"""关闭事件处理"""
|
||||
self.media_player.stop()
|
||||
event.accept()
|
||||
Reference in New Issue
Block a user