-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpyqtplayer.py
119 lines (81 loc) · 2.96 KB
/
pyqtplayer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
from PyQt5.QtWidgets import QFileDialog, QSizePolicy, QStyle, QApplication, QWidget, QPushButton, QHBoxLayout, QVBoxLayout, QLabel, QSlider
from PyQt5.QtGui import QIcon, QPalette
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent
from PyQt5.QtMultimediaWidgets import QVideoWidget
from PyQt5.QtCore import Qt, QUrl
import sys
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("PyQt5 Player")
self.setGeometry(350,100,700,500)
p = self.palette()
p.setColor(QPalette.Window, Qt.black)
self.setPalette(p)
self.init_ui()
self.show()
def init_ui(self):
self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
# create video widget object
videoWidget = QVideoWidget()
# create open object
openButton = QPushButton('Open Video')
openButton.clicked.connect(self.open_file)
self.playButton = QPushButton()
self.playButton.setEnabled(False)
self.playButton.setIcon(self.style().standardIcon(QStyle.SP_MediaPlay))
self.playButton.clicked.connect(self.play_video)
self.slider = QSlider(Qt.Horizontal)
self.slider.setRange(0,0)
self.slider.sliderMoved.connect(self.set_position)
# create label
self.label = QLabel()
self.label.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum)
# create HBoxLayout
hBoxLayout = QHBoxLayout()
hBoxLayout.setContentsMargins(0,0,0,0)
hBoxLayout.addWidget(openButton)
hBoxLayout.addWidget(self.playButton)
hBoxLayout.addWidget(self.slider)
vBoxLayout = QVBoxLayout()
vBoxLayout.addWidget(videoWidget)
vBoxLayout.addLayout(hBoxLayout)
vBoxLayout.addWidget(self.label)
self.setLayout(vBoxLayout)
self.mediaPlayer.setVideoOutput(videoWidget)
# media player signals
self.mediaPlayer.stateChanged.connect(self.mediaState_change)
self.mediaPlayer.positionChanged.connect(self.position_changed)
self.mediaPlayer.durationChanged.connect(self.duration_changed)
def open_file(self):
filename, _ =QFileDialog.getOpenFileName(self,"Open Video")
if filename != '':
self.mediaPlayer.setMedia(QMediaContent(QUrl.fromLocalFile(filename)))
self.playButton.setEnabled(True)
def play_video(self):
if(self.mediaPlayer.state() == QMediaPlayer.PlayingState):
self.mediaPlayer.pause()
else:
self.mediaPlayer.play()
def mediaState_change(self,state):
if(self.mediaPlayer.state() == QMediaPlayer.PlayingState):
self.playButton.setIcon(
self.style().standardIcon(QStyle.SP_MediaPause)
)
else:
self.playButton.setIcon(
self.style().standardIcon(QStyle.SP_MediaPlay)
)
def position_changed(self,position):
self.slider.setValue(position)
def duration_changed(self,duration):
self.slider.setRange(0,duration)
def set_position(self,position):
self.mediaPlayer.setPosition(position)
def handle_errors(self):
self.playButton.setEnabled(False)
self.label.setText("Error: " + self.mediaPlayer.errorString())
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Window()
sys.exit(app.exec_())