Video播放器 PyQt5 QMediaPlayer

Python PyQt5 QMediaPlayer Video播放器
前言:
写个Python GUI介面总是让人抓狂,Debug不易,还要在脑袋内想像Window画面,哪个元件连到哪个function、该做什麽、放在那一段…琐琐碎碎的,要改一小段就要从头翻到尾….真让人怀念IDE的方便年代。
前阵子从网路上找到的Source Code,拼凑成一个VideoPlayer,改完了,程序码还是迷迷糊糊的。最近,使用Qt Designer重做一个,就当是GUI的习作吧。
Source Code 在此:
[ ufrmVideo.ui]
[ ufrmVideo.py]
[VideoPlayer202108.py]

打包执行档(Win 64x) VideoPlayer202108.exe ( 还需要另外安装 K-Lite 或 ffmpeg 才能顺利播放,请自行搜寻下载。)

Step 1、 Qt Designer 建构画面
Qt Designer 建好的档 ufrmVideo.ui 转成 ufrmVideo.py
请执行 Pyuic5 ufrmVideo.ui -o ufrmVideo.py
这个档的内容就不要修改了,因为即使改了,下次再进入 Qt Designer编辑,就都不见了。

画面布置:一个Menubar 选档案、一个ListView 显示档案、一排PushButton、两个 Slider(控制音量、显示进度)、两个Label(显示播放时间、影片全长)
注:ViewButton 、PauseButton 的checkable请勾选
Step 2 、主程序
三个Class ViewerWindow 影片播放窗、MainWindow控制窗、PlaylistModel播放清单

影片播放窗

class ViewerWindow(QMainWindow):
    # state for view  
    state = pyqtSignal(bool)
    # sign for pause 
    sign = pyqtSignal(bool)
    
    def closeEvent(self, e):
        # emit to update the viewer button 
        self.state.emit()
    
    def mousePressEvent(self, e):
        if e.button() == Qt.RightButton:
            print('Rt click pause')
            self.sign.emit(True)
                        
    def keyPressEvent(self,e ):
        if e.key() == Qt.Key_Escape:
            print('Esc pressed')
            self.state.emit()

ps. 以pyqtSignal 激发ui Button,再切换自己的显示、隐藏,控制player暂停、播放…。
这种绕迷宫的方式,我已经卡卡…Sorry,有兴趣的自己研究吧。
其余代码请下载 VideoPlayer202108.py
本程序只选取主要相关事件,非完整播放程序,其它功能请自行开发。

程序执行步骤:
Menu : File --> Open
listView -->选video
Play --> View (显示影片)

结论心得:

  • 使用Qt Designer 编排画面,可减低痛苦指数。
  • Debug是一场灾难。除错、了解程序码、推导流程的过程,就好比是,打翻了一堆零组件,趴在地上遍地寻找,查查看这零件功能是啥,再一片片组装测试…
  • Python+GUI 要逐行逐字去追踪程序流向,只有一个隐约的程序模板概念:
    MainWindow -->show --> 元件connect -->事件执行…
  • 无法像IDE的:点元件 --> 选事件--> 写码 --> 执行。

<<:  Day38 参加职训(机器学习与资料分析工程师培训班),RNN

>>:  Rails幼幼班--由seeds认识Rake

从 JavaScript 角度学 Python(4) - 型别与变数

前言 oh!终於要开始学习写 Python 了呢!(被揍),都混了三天,我如果再不开始写 Pytho...

【Day 18】while 回圈 / do...while 回圈

今天我们来看看 while 回圈吧~ while 回圈的基本语法: while(test_Expre...

[ JS个人笔记 ] 各种讨人厌的运算&转型案例—DAY2

特殊的数字 Infinity 系列: Infinity + Infinity // Infinity...

Day12 - Kotlin的集合

Day12 - Kotlin的集合 我今天要讲的是Kotlin的集合,今天就稍微讲一下集合List,...

[Day 28] 从零开始学Python - 深度学习Keras:如果你能预知这条路的陷阱,我想你依然错得很过瘾

注:本文同步刊载在Medium,若习惯Medium的话亦可去那边看呦! 接下来让我们来聊聊Pytho...