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的:点元件 --> 选事件--> 写码 --> 执行。