前言
本文的文字及圖片來源于網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯系我們以作處理,
以下文章來源于Charles的皮卡丘 ,作者白露未晞me
Python爬蟲、資料分析、網站開發等案例教程視頻免費在線觀看
https://space.bilibili.com/523606542
這里我們主要利用PyQt5來帶大家寫個簡單的視頻播放器,首先,我們來初始化一下視頻播放器的視窗:
# 初始化視窗 self.setWindowTitle('視頻播放器') self.setWindowIcon(QIcon(os.path.join(os.getcwd(), 'images/icon.png'))) self.setGeometry(300, 50, 810, 600) self.setWindowFlags(Qt.WindowCloseButtonHint | Qt.WindowMinimizeButtonHint) palette = QPalette() palette.setColor(QPalette.Background, Qt.gray) self.setPalette(palette)
其中setWindowTitle函式用于設定視窗標題,而setWindowIcon函式則用于設定視窗圖示:
接著,我們來定義一些必要的組件,即視頻播放插件:
self.video_widget = QVideoWidget(self) self.video_widget.setGeometry(QRect(5, 5, 800, 520)) palette = QPalette() palette.setColor(QPalette.Background, Qt.black) self.video_widget.setPalette(palette) self.video_widget.setStyleSheet(' padding: 0px; border: 0px; color: rgb(17, 75, 166);">self.player = QMediaPlayer(self) self.player.setVideoOutput(self.video_widget) self.player.setVolume(50)
和選擇視頻相關的組件:
# --當前的視頻路徑 self.video_line_edit = QLineEdit('') # --選擇視頻按鈕 self.select_video_btn = QPushButton('選擇')
播放和暫停按鈕(需要注意的是播放和暫停按鈕不能同時顯示,即默認是顯示播放鍵,隱藏暫停鍵,按下播放鍵后播放鍵按鈕隱藏,而暫停鍵按鈕顯示,以此類推):
# --播放按鈕 self.play_btn = QPushButton(self) self.play_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/play.png'))) self.play_btn.setIconSize(QSize(25, 25)) self.play_btn.setStyleSheet('''QPushButton{border:none;}QPushButton:hover{border:none;border-radius:35px;}''') self.play_btn.setCursor(QCursor(Qt.PointingHandCursor)) self.play_btn.setToolTip('播放') self.play_btn.setFlat(True) # --暫停按鈕 self.pause_btn = QPushButton('') self.pause_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/pause.png'))) self.pause_btn.setIconSize(QSize(25, 25)) self.pause_btn.setStyleSheet('''QPushButton{border:none;}QPushButton:hover{border:none;}''') self.pause_btn.setCursor(QCursor(Qt.PointingHandCursor)) self.pause_btn.setToolTip('暫停') self.pause_btn.setFlat(True) self.pause_btn.hide()
播放進度相關的組件:
# --播放進度 self.play_progress_label = QLabel('00:00 / 00: 00') self.play_progress_slider = QSlider(Qt.Horizontal, self) self.play_progress_slider.setMinimum(0) self.play_progress_slider.setSingleStep(1) self.play_progress_slider.setGeometry(QRect(0, 0, 200, 10))
音量控制相關的組件:
# --音量控制 self.volume_slider = QSlider(Qt.Horizontal) self.volume_slider.setMinimum(0) self.volume_slider.setMaximum(100) self.volume_slider.setValue(50) self.mute_btn = QPushButton('') self.mute_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/sound.png'))) self.mute_btn.setIconSize(QSize(25, 25)) self.mute_btn.setStyleSheet('''QPushButton{border:none;}QPushButton:hover{border:none;}''') self.mute_btn.setCursor(QCursor(Qt.PointingHandCursor)) self.mute_btn.setToolTip('禁音') self.mute_btn.setFlat(True) self.volume_label = QLabel('50')
然后簡單地自動布局一下:
# --布局 v_layout = QVBoxLayout() v_layout.setSpacing(0) v_layout.addStretch() h_layout = QHBoxLayout() h_layout.setSpacing(15) h_layout.addWidget(self.video_line_edit, 2, Qt.AlignVCenter | Qt.AlignVCenter) h_layout.addWidget(self.select_video_btn, 0, Qt.AlignCenter | Qt.AlignVCenter) v_layout.addLayout(h_layout) h_layout = QHBoxLayout() h_layout.setSpacing(2) h_layout.addWidget(self.play_btn, 0, Qt.AlignCenter | Qt.AlignVCenter) h_layout.addWidget(self.pause_btn, 0, Qt.AlignCenter | Qt.AlignVCenter) h_layout.addWidget(self.play_progress_label, 0, Qt.AlignCenter | Qt.AlignVCenter) h_layout.addWidget(self.play_progress_slider, 15, Qt.AlignVCenter | Qt.AlignVCenter) h_layout.addWidget(self.mute_btn, 0, Qt.AlignCenter | Qt.AlignVCenter) h_layout.addWidget(self.volume_slider, 0, Qt.AlignCenter | Qt.AlignVCenter) h_layout.addWidget(self.volume_label, 0, Qt.AlignCenter | Qt.AlignVCenter) v_layout.addLayout(h_layout) self.setLayout(v_layout)
接著,我們來實作一下各個控制元件可以觸發的功能,首先是播放和暫停功能,這個很簡單,代碼如下:
'''播放視頻''' def playvideo(self): if self.player.duration() == 0: return self.play_btn.hide() self.pause_btn.show() self.player.play() '''暫停視頻''' def pausevideo(self): if self.player.duration() == 0: return self.play_btn.show() self.pause_btn.hide() self.player.pause()
需要注意的是點擊播放和暫停按鈕的時候需要同時切換一下按鈕的狀態(即點擊完暫停鍵需要顯示播放鍵隱藏暫停鍵,點擊完播放鍵需要顯示暫停鍵隱藏播放鍵,以實作按鍵切換形態的效果),
在播放的程序中,記得實時地修改進度條的顯示:
'''播放進度設定''' def setPlayProgress(self): _, right = self.play_progress_label.text().split('/') position = self.player.position() + 1 second = int(position / 1000 % 60) minute = int(position / 1000 / 60) left = str(minute).zfill(2) + ':' + str(second).zfill(2) self.play_progress_label.setText(left + ' /' + right) self.play_progress_slider.setValue(position)
對了,播放視頻之前我們需要打開視頻檔案,功能實作如下:
'''打開視頻檔案''' def openvideo(self): # 打開并顯示視頻路徑 filepath = QFileDialog.getOpenFileName(self, '請選擇視頻', '.') if filepath[0]: self.video_line_edit.setText(filepath[0]) # 將視頻路徑初始化進視頻播放插件 filepath = self.video_line_edit.text() if not os.path.exists(filepath): return fileurl = QUrl.fromLocalFile(filepath) if fileurl.isValid(): self.player.setMedia(QMediaContent(fileurl)) self.player.setVolume(50)
接著是拖動視頻播放進度條的功能:
'''播放進度條按下ing事件''' def playProgressSliderPressed(self): if self.player.state() != 0: self.player.pause() '''播放進度條按下釋放事件''' def playProgressSliderReleased(self): if self.player.state() != 0: self.player.setPosition(self.play_progress_slider.value()) self.player.play()
即拖動進度條的程序中暫停播放視頻,拖動結束后將視頻的播放進度切換到和進度條相對應的位置,
音量控制功能(這個原理和拖動視頻播放進度條的實作類似):
'''設定音量''' def setVolume(self): value = self.volume_slider.value() if value: self.player.setMuted(False) self.player.setVolume(value) self.volume_label.setText(str(value)) self.volume_slider.setValue(value) self.mute_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/sound.png'))) else: self.player.setMuted(True) self.volume_label.setText('0') self.volume_slider.setValue(0) self.mute_btn.setIcon(QIcon(os.path.join(os.getcwd(), 'images/mute.png')))
最后一個小細節,當視頻播放器的視窗大小改變時,我們自適應地修改播放插件的視窗大小:
'''改變視窗大小''' def resizeEvent(self, event): size = event.size() self.video_widget.setGeometry(5, 5, size.width() - 5, size.height() - 80)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/244565.html
標籤:Python
上一篇:Github上目標檢測專案: mmdetection專案初接觸,安裝學習程序記錄。
下一篇:Redis--部署操作
