- 1.4 需求分析 (播放、暂停、显示正在播放的歌曲名、切换播放模式、滚动条拖动音乐进度、播放进度与时长)
设计界面
打开PyQt5工具
选择右边的控件,直接拖动设计就行,然后右边有一些控件属性可以自行设计。
功能需求
播放、暂停
def musicPlay(self):
# 判断是否是播放状态
if self.player.state() == QMediaPlayer.State.PlayingState:
# 更改播放器为暂停状态
self.player.pause()
# 更改播放按钮的图片为暂停图片
self.play_bin.setIcon(QIcon('D:\Program Files (x86)\Python\Myplayer\image\暂停.png'))
# 设置提示信息为暂停
self.play_bin.setToolTip('暂停')
# 判断是否是暂停状态
elif self.player.state() == QMediaPlayer.State.PausedState:
# 更改播放器为播放状态
self.player.play()
# 更改播放按钮为播放图片
self.play_bin.setIcon(QIcon('D:\Program Files (x86)\Python\Myplayer\image\播放.png'))
# 设置提示信息为播放
self.play_bin.setToolTip('播放')
# 否则(停止)
else:
# 获取本地音频文件
fileNames, typeName = QFileDialog.getOpenFileNames(None, '选择文件', '', '*')
print(fileNames)
for i in fileNames:
# 把音频加载到播放列表对象中
self.playList.addMedia(QMediaContent(QUrl.fromLocalFile(i)))
print(i)
# 获取音频文件路径最后一个’/‘字符的位置
start = i.rfind('/')
# 获取音频文件路径最后’.‘字符位置
end = i.rfind('.')
# 获取音频文件中文件名称,追加到列表对象中
self.musicNames.append(i[start + 1:end])
print(self.musicNames)
# 设置当前播放列表的播放音频索引
self.playList.setCurrentIndex(0)
# 开始播放
self.player.play()
# 更改播放按钮的图片为暂停图片
self.play_bin.setIcon(QIcon('D:\Program Files (x86)\Python\Myplayer\image\暂停.png'))
# 设置提示信息为暂停
self.play_bin.setToolTip('暂停')
# 设置窗体标题显示当前播放音频名称
MainWindow.setWindowTitle(f'彩虹音乐----{self.musicNames[0]}')
播放模式
列表、单循环模式。
# 自定义函数更改播放模式
def modeChanged(self):
# 判断播放列表的播放模式是否顺序播放
if self.playList.playbackMode()==QMediaPlaylist.Loop:
# 更改播放列表当前播放模式为单曲循环
self.playList.setPlaybackMode(QMediaPlaylist.CurrentItemInLoop)
# 更改按钮的图片为单曲循环
self.pushButton.setIcon(QIcon('D:\Program Files (x86)\Python\Myplayer\image\循环.png'))
# 更改播放模式按钮的提示信息
self.pushButton.setToolTip('单曲循环')
# 否则(单曲循环)
else:
# 更改播放列表当前播放模式为列表
self.playList.setPlaybackMode(QMediaPlaylist.Loop)
# 更改按钮的图片为列表
self.pushButton.setIcon(QIcon('D:\Program Files (x86)\Python\Myplayer\image\列表.png'))
# 更改播放模式按钮的提示信息
self.pushButton.setToolTip('顺序播放')
时长显示
这里边代码比较简单,就写在一起了,功能包括拖动方框实现歌曲快进,标题框显示正在播放的歌曲名称,标签显示播放时长。
# 自定义函数,获取播放音频的总时长,参数d保存的音频的总时长(毫秒)
def getTotalTime(self, d):
# 设置时间进度条的进度值和正在播放的音频总时长一致
self.horizontalSlider.setRange(0,d)
# 获取当前播放列表对象中播放音频的索引
index = self.playList.currentIndex()
# 设置窗体标题显示播放音频名称
MainWindow.setWindowTitle(f'彩虹音乐----{self.musicNames[index]}')
# 自定义函数,获取播放音频的当前时长,参数p保存的音频的当前时长(毫秒)
def getCurrentTime(self,p):
#设置市场进度条当前的进度
self.horizontalSlider.setValue(p)
# 获取时长的秒
seconds =int(p/1000)
# 获取分钟
minutes = int(seconds/60)
seconds=seconds-minutes*60
#把分钟和秒设置在时间标签中显示
self.label.setText(f'{minutes}:{seconds}')
#自定义函数,更改当前播放位置,拖动方块
def timeChanged(self,t):
# 设置播放器的当前位置为进度条的当前进度t
self.player.setPosition(t)
主窗体
def myWindowInit(self):
# 创建播放列表属性
self.playList = QMediaPlaylist()
# 初始化播放列表对象的播放模式Loop(顺序播放)
self.playList.setPlaybackMode(QMediaPlaylist.Loop)
# 创建播放器对象(窗体属性)
self.player = QMediaPlayer()
# 初始化播放器的播放音量最大
self.player.setVolume(100)
# 设置播放器的播放列表
self.player.setPlaylist(self.playList)
# 创建列表对象(窗体属性)
self.musicNames = []
# 设置按钮初始化提示信息
self.play_bin.setToolTip('播放')
self.pushButton.setToolTip('顺序播放')
# 给播放按钮单击信号(clicke)调用函数musicPlay
self.play_bin.clicked.connect(self.musicPlay)
# 给播放器的播放音频持续时长改变信号(durationChanged)调用getTotalTime
self.player.durationChanged.connect(self.getTotalTime)
# 给播放器的当前位置更改播放信号(positionChanged)调用getCurrentTime
self.player.positionChanged.connect(self.getCurrentTime)
# 给进度条的拖拽移动(sliderMoved)调用自定义函数timeChanged
self.horizontalSlider.sliderMoved.connect(self.timeChanged)
# 模式按钮单击信号(clicked)调用自定义函数modeChanged
self.pushButton.clicked.connect(self.modeChanged)
打包成可执行文件
我最后是打包成了有正式安装步骤的应用软件,可以不用PyCharm 环境启动。
如果需要打包教程,我会详细出一期的,本站大佬写的打包教程和我自己的简单方法都不一样,感觉有些复杂。
成果展示
可以载入本地音频播放
完整代码与文件
如果需要完整版代码,不要忘记点赞收藏评论哦!
往期文章分享
【python】人机猜拳游戏(条件嵌套方法)
【python】GIF动图格式转化为Png格式
【python】高阶函数的举例(map、reduce、filter函数和lambda表达式)
【python】关于40个常见方法的举例~便与更好的理解python当中的常用方法
【python】学生信息管理系统
本文仅供参考学习交流,感谢大家的支持~