iT邦幫忙

1

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的:點元件 --> 選事件--> 寫碼 --> 執行。

尚未有邦友留言

立即登入留言