s3manager-qt/videoplayer.py
2024-08-27 12:50:56 -07:00

150 lines
4.9 KiB
Python

import sys
import time
import threading
from PyQt6.QtWidgets import QApplication, QMainWindow, QHBoxLayout, QVBoxLayout, QWidget, QPushButton, QSlider
from PyQt6.QtMultimedia import QMediaPlayer, QAudioOutput
from PyQt6.QtMultimediaWidgets import QVideoWidget
from PyQt6.QtCore import QUrl, Qt, QEvent
class VideoPlayer(QMainWindow):
def __init__(self):
super().__init__()
self.fswindow = 0
self.dclick = False
self.setWindowTitle("Video Player")
self.setGeometry(100, 100, 640, 480)
#self.showFullScreen()
self.media_player = QMediaPlayer(None)
self.video_widget = QVideoWidget()
self.installEventFilter(self)
self.start_button = QPushButton("Start")
self.start_button.setFixedSize(60, 33)
self.start_button.clicked.connect(self.start_video)
self.pause_button = QPushButton("Pause")
self.pause_button.setFixedSize(60, 33)
self.pause_button.clicked.connect(self.pause_video)
self.stop_button = QPushButton("Stop")
self.stop_button.setFixedSize(60, 33)
self.stop_button.clicked.connect(self.stop_video)
self.slider = QSlider(Qt.Orientation.Horizontal)
self.slider.sliderMoved.connect(self.set_position)
self.media_player.setVideoOutput(self.video_widget)
self.media_player.setSource(QUrl("https://video.asgardius.company/download/videos/41bf7df4-8f6c-45e9-96ef-a8dd57c865c8-480.mp4"))
self.media_player.positionChanged.connect(self.position_changed)
self.media_player.durationChanged.connect(self.duration_changed)
self.audio_output = QAudioOutput()
self.audio_output.setVolume(100)
self.media_player.setAudioOutput(self.audio_output)
layout = QVBoxLayout()
controls = QHBoxLayout()
controls.addWidget(self.start_button)
controls.addWidget(self.pause_button)
controls.addWidget(self.stop_button)
layout.addWidget(self.video_widget)
layout.addLayout(controls)
layout.addWidget(self.slider)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
#self.set_layout()
def set_layout(self):
self.video_widget = QVideoWidget()
self.start_button = QPushButton("Start")
self.start_button.setFixedSize(60, 33)
self.start_button.clicked.connect(self.start_video)
self.pause_button = QPushButton("Pause")
self.pause_button.setFixedSize(60, 33)
self.pause_button.clicked.connect(self.pause_video)
self.stop_button = QPushButton("Stop")
self.stop_button.setFixedSize(60, 33)
self.stop_button.clicked.connect(self.stop_video)
self.slider = QSlider(Qt.Orientation.Horizontal)
self.slider.sliderMoved.connect(self.set_position)
self.media_player.setVideoOutput(self.video_widget)
layout = QVBoxLayout()
controls = QHBoxLayout()
controls.addWidget(self.start_button)
controls.addWidget(self.pause_button)
controls.addWidget(self.stop_button)
layout.addWidget(self.video_widget)
layout.addLayout(controls)
layout.addWidget(self.slider)
container = QWidget()
container.setLayout(layout)
self.setCentralWidget(container)
def start_video(self):
self.media_player.play()
def pause_video(self):
self.media_player.pause()
def stop_video(self):
self.media_player.stop()
def set_position(self, position):
if not self.fswindow:
self.media_player.setPosition(position)
def position_changed(self, position):
if not self.fswindow:
self.slider.setValue(position)
def duration_changed(self, duration):
if not self.fswindow:
self.slider.setRange(0, duration)
def toglefs(self):
if not self.fswindow == 0:
self.showNormal()
if self.fswindow == 1:
self.showMaximized()
self.set_layout()
self.fswindow = 0
else:
if self.isMaximized():
self.fswindow = 1
print("maximized")
else:
self.fswindow = 2
self.showFullScreen()
self.setCentralWidget(self.video_widget)
def dclickthr(self):
self.dclick = True
print(self.dclick)
time.sleep(0.5)
self.dclick = False
print(self.dclick)
def eventFilter(self, obj, event):
if event.type() == 3:
if self.dclick:
self.toglefs()
else:
dclickth = threading.Thread(target=self.dclickthr, name="Double Click")
dclickth.start()
#print(event.type())
return True
if __name__ == "__main__":
app = QApplication(sys.argv)
video_player = VideoPlayer()
video_player.show()
sys.exit(app.exec())