PyQt5:QMediaplayer,QVideowidget播放视频(3)
简介
在 PyQt5:QMediaplayer,QVideowidget播放视频(2)上一篇中完善了界面的布局,快进,慢进。在本篇更新中做了代码做了重构,架构的好坏就另说了,python 没有做过成熟的项目,一直自己写的玩。在本篇中主要更新了UI、播放列表、配置项、媒体文件管理、布局、子控件,还有快进、快退、音量等等一些基础功能。
代码结构
模块架构
文件结构
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 2020/9/21 20:52 __pycache__
-a---- 2020/5/18 22:28 761 audio.py
-a---- 2020/5/18 22:23 2008 audio.ui
-a---- 2020/9/22 22:13 379 config.json
-a---- 2020/5/6 23:31 2371 itemWidget.ui
-a---- 2020/9/22 22:15 7805 MediaPlayer.py
-a---- 2020/5/18 23:03 1776 MediaPlayer.pyproj
-a---- 2020/9/21 20:52 9788 MediaPlayer.ui
-a---- 2020/9/21 20:52 8664 ui.py
-a---- 2020/5/18 22:01 2281 ui_audio.py
-a---- 2020/5/14 21:10 5533 ui_url.py
-a---- 2020/5/18 23:03 991 urlWidget.py
-a---- 2020/5/14 21:10 7030 urlWidget.ui
在上图中可以看到,主要分为三个模块,MediaPlayer、audio、urlWidget 三个模块。其中 MediaPlayer为主窗口,主体界面布局、逻辑功能、播放窗口、播放列表都在其中实现。audio模块主要负责音量条。urlWidget模块主要负责网络url弹窗输入。
源码介绍
Audio
在文件结构中可以看到,主要有三个文件。audio.ui,ui_audio.py,audio.py 分别是 UI设计文件,UIpy文件,code文件。
Audio.ui
UI设计文件:

Widget类型,布局全部用UI布局,不使用代码,原则是,尽量少用代码设置,方便后期修改维护。布局时,使用Frame嵌套,方便子控件修改。提高易用性,可读性。
Audio_ui.py
FileName = os.path.basename(sys.argv[0])
FilePath = sys.argv[0].replace(FileName,"")
UiName = FileName.replace(".py",".ui")
UiPath = FilePath +UiName
Ui_pyName = FilePath+"ui_audio.py"
FileFlag = os.path.isfile(Ui_pyName)
if FileFlag == 0:
sys_cmd = os.popen("pyuic5"+" -o "+Ui_pyName+" "+UiPath)
time.sleep(1)
还是采用之前的方法,使用命令转换,在更新UI后,删除之前的 ui_xxx.py文件,下次会自动生成。记得将对应的audio.py 设置为启动文件。然后在切回去。
audio.py
from ui_audio import Ui_Audio
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class audioWidget(QWidget):
def __init__(self):
super(audioWidget,self).__init__()
global ui
ui = Ui_Audio()
ui.setupUi(self)
self.audio = ui
def getSlider(self):
return self.audio.verticalSlider
def getMuteBtn(self):
return self.audio.pushButton
对外接口主要有两个 音量输出,静音输出。
urlWidget
与audio模块相同也是拥有三个对应文件. ui 和 ui.py 不做介绍
urlWidget.ui
urlWidget_ui.py
urlWidget.py
from ui_url import Ui_urlWidget
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class urlWidget(QWidget):
fileInfo_Signle = pyqtSignal(list)
def __init__(self):
super(urlWidget,self).__init__()
global ui
ui = Ui_urlWidget()
ui.setupUi(self)
self.url = ui
ui.pushButton_2.clicked.connect(self.sltConfirm)
def getFileInfo(self):
return [self.url.lineEdit_url.text(),self.url.lineEdit.text()]
def sltConfirm(self):
self.fileInfo_Signle.emit([self.url.lineEdit_url.text(),self.url.lineEdit.text()])
self.hide()
def sltCancel(self):
self.hide()
其功能主要是添加网络媒体资源时,提供单独的窗口,有两个输入的LineEidt ,一个是 url 路径,一个 媒体资源名称。
提供了两种方式对外输出urlhe 媒体文件名称。调用接口与信号槽
def getFileInfo(self):
return [self.url.lineEdit_url.text(),self.url.lineEdit.text()]
fileInfo_Signle = pyqtSignal(list)
def sltConfirm(self):
self.fileInfo_Signle.emit([self.url.lineEdit_url.text(),self.url.lineEdit.text()])
self.hide()
MediaPlayer
该模块主窗口模块,主要负责逻辑部分即业务部分。还有一些 listwdiget,videowidget 主要功能实现,其实按照设计模式应该也做单独的 模块,主窗口负责调用。
下面介绍MediaPlayer
初始化
init
def __init

本文介绍了使用PyQt5构建的多媒体播放器的开发过程,包括播放列表管理、音频设置、文件添加(本地和网络)、播放控制等功能。通过模块化设计,实现了界面布局、播放控制和音量调节等基础功能。同时,文章还展示了如何保存和加载配置文件以保持播放状态。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



