【脚本项目源码】Python制作多功能音乐播放器,打造专属你的音乐播放器
创始人
2024-04-21 22:24:29
0

前言

本文给大家分享的是如何通过利用Python实现多功能音乐播放器,废话不多直接开整~

开发工具

Python版本: 3.6

相关模块:

os模块

sys模块

time模块

random模块

PyQt5模块

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

文中完整源码,评论留言获取。

代码实现

初始化

	def __initialize(self):self.setWindowTitle('音乐播放器-Python工程狮')self.setWindowIcon(QIcon('icon.ico'))self.songs_list = []self.song_formats = ['mp3', 'm4a', 'flac', 'wav', 'ogg']self.settingfilename = 'setting.ini'self.player = QMediaPlayer()self.cur_path = os.path.abspath(os.path.dirname(__file__))self.cur_playing_song = ''self.is_switching = Falseself.is_pause = True# 界面元素# --播放时间self.label1 = QLabel('00:00')self.label1.setStyle(QStyleFactory.create('Fusion'))self.label2 = QLabel('00:00')self.label2.setStyle(QStyleFactory.create('Fusion'))# --滑动条self.slider = QSlider(Qt.Horizontal, self)self.slider.sliderMoved[int].connect(lambda: self.player.setPosition(self.slider.value()))self.slider.setStyle(QStyleFactory.create('Fusion'))# --播放按钮self.play_button = QPushButton('播放', self)self.play_button.clicked.connect(self.playMusic)self.play_button.setStyle(QStyleFactory.create('Fusion'))# --上一首按钮self.preview_button = QPushButton('上一首', self)self.preview_button.clicked.connect(self.previewMusic)self.preview_button.setStyle(QStyleFactory.create('Fusion'))# --下一首按钮self.next_button = QPushButton('下一首', self)self.next_button.clicked.connect(self.nextMusic)self.next_button.setStyle(QStyleFactory.create('Fusion'))# --打开文件夹按钮self.open_button = QPushButton('打开文件夹', self)self.open_button.setStyle(QStyleFactory.create('Fusion'))self.open_button.clicked.connect(self.openDir)# --显示音乐列表self.qlist = QListWidget()self.qlist.itemDoubleClicked.connect(self.doubleClicked)self.qlist.setStyle(QStyleFactory.create('windows'))# --如果有初始化setting, 导入settingself.loadSetting()# --播放模式self.cmb = QComboBox()self.cmb.setStyle(QStyleFactory.create('Fusion'))self.cmb.addItem('顺序播放')self.cmb.addItem('单曲循环')self.cmb.addItem('随机播放')# --计时器self.timer = QTimer(self)self.timer.start(1000)self.timer.timeout.connect(self.playByMode)# 界面布局self.grid = QGridLayout()self.setLayout(self.grid)self.grid.addWidget(self.qlist, 0, 0, 5, 10)self.grid.addWidget(self.label1, 0, 11, 1, 1)self.grid.addWidget(self.slider, 0, 12, 1, 1)self.grid.addWidget(self.label2, 0, 13, 1, 1)self.grid.addWidget(self.play_button, 0, 14, 1, 1)self.grid.addWidget(self.next_button, 1, 11, 1, 2)self.grid.addWidget(self.preview_button, 2, 11, 1, 2)self.grid.addWidget(self.cmb, 3, 11, 1, 2)self.grid.addWidget(self.open_button, 4, 11, 1, 2)

根据播放模式播放音乐

	def playByMode(self):if (not self.is_pause) and (not self.is_switching):self.slider.setMinimum(0)self.slider.setMaximum(self.player.duration())self.slider.setValue(self.slider.value() + 1000)self.label1.setText(time.strftime('%M:%S', time.localtime(self.player.position()/1000)))self.label2.setText(time.strftime('%M:%S', time.localtime(self.player.duration()/1000)))# 顺序播放if (self.cmb.currentIndex() == 0) and (not self.is_pause) and (not self.is_switching):if self.qlist.count() == 0:returnif self.player.position() == self.player.duration():self.nextMusic()# 单曲循环elif (self.cmb.currentIndex() == 1) and (not self.is_pause) and (not self.is_switching):if self.qlist.count() == 0:returnif self.player.position() == self.player.duration():self.is_switching = Trueself.setCurPlaying()self.slider.setValue(0)self.playMusic()self.is_switching = False# 随机播放elif (self.cmb.currentIndex() == 2) and (not self.is_pause) and (not self.is_switching):if self.qlist.count() == 0:returnif self.player.position() == self.player.duration():self.is_switching = Trueself.qlist.setCurrentRow(random.randint(0, self.qlist.count()-1))self.setCurPlaying()self.slider.setValue(0)self.playMusic()self.is_switching = False

代码有点多~~

剩余代码

'''打开文件夹'''def openDir(self):self.cur_path = QFileDialog.getExistingDirectory(self, "选取文件夹", self.cur_path)if self.cur_path:self.showMusicList()self.cur_playing_song = ''self.setCurPlaying()self.label1.setText('00:00')self.label2.setText('00:00')self.slider.setSliderPosition(0)self.is_pause = Trueself.play_button.setText('播放')'''导入setting'''def loadSetting(self):if os.path.isfile(self.settingfilename):config = configparser.ConfigParser()config.read(self.settingfilename)self.cur_path = config.get('MusicPlayer', 'PATH')self.showMusicList()'''更新setting'''def updateSetting(self):config = configparser.ConfigParser()config.read(self.settingfilename)if not os.path.isfile(self.settingfilename):config.add_section('MusicPlayer')config.set('MusicPlayer', 'PATH', self.cur_path)config.write(open(self.settingfilename, 'w'))'''显示文件夹中所有音乐'''def showMusicList(self):self.qlist.clear()self.updateSetting()for song in os.listdir(self.cur_path):if song.split('.')[-1] in self.song_formats:self.songs_list.append([song, os.path.join(self.cur_path, song).replace('\\', '/')])self.qlist.addItem(song)self.qlist.setCurrentRow(0)if self.songs_list:self.cur_playing_song = self.songs_list[self.qlist.currentRow()][-1]'''双击播放音乐'''def doubleClicked(self):self.slider.setValue(0)self.is_switching = Trueself.setCurPlaying()self.playMusic()self.is_switching = False'''设置当前播放的音乐'''def setCurPlaying(self):self.cur_playing_song = self.songs_list[self.qlist.currentRow()][-1]self.player.setMedia(QMediaContent(QUrl(self.cur_playing_song)))'''提示'''def Tips(self, message):QMessageBox.about(self, "提示", message)'''播放音乐'''def playMusic(self):if self.qlist.count() == 0:self.Tips('当前路径内无可播放的音乐文件')returnif not self.player.isAudioAvailable():self.setCurPlaying()if self.is_pause or self.is_switching:self.player.play()self.is_pause = Falseself.play_button.setText('暂停')elif (not self.is_pause) and (not self.is_switching):self.player.pause()self.is_pause = Trueself.play_button.setText('播放')'''上一首'''def previewMusic(self):self.slider.setValue(0)if self.qlist.count() == 0:self.Tips('当前路径内无可播放的音乐文件')returnpre_row = self.qlist.currentRow()-1 if self.qlist.currentRow() != 0 else self.qlist.count() - 1self.qlist.setCurrentRow(pre_row)self.is_switching = Trueself.setCurPlaying()self.playMusic()self.is_switching = False'''下一首'''def nextMusic(self):self.slider.setValue(0)if self.qlist.count() == 0:self.Tips('当前路径内无可播放的音乐文件')returnnext_row = self.qlist.currentRow()+1 if self.qlist.currentRow() != self.qlist.count()-1 else 0self.qlist.setCurrentRow(next_row)self.is_switching = Trueself.setCurPlaying()self.playMusic()self.is_switching = False'''run'''
if __name__ == '__main__':app = QApplication(sys.argv)gui = musicPlayer()gui.show()sys.exit(app.exec_())

结果展示

音乐播放器

最后

为了感谢读者们,我想把我最近收藏的一些编程干货分享给大家,回馈每一个读者,希望能帮到你们。

里面有适合小白新手的全套教程给到大家~

快来和小鱼一起成长进步吧!

① 100+多本PythonPDF(主流和经典的书籍应该都有了)

② Python标准库(最全中文版)

③ 爬虫项目源码(四五十个有趣且经典的练手项目及源码)

④ Python基础入门、爬虫、web开发、大数据分析方面的视频(适合小白学习)

⑤ Python学习路线图(告别不入流的学习)

相关内容

热门资讯

55英寸安卓系统,畅享科技与娱... 你有没有想过,家里的电视该升级换代了?别急,今天就来给你好好聊聊55英寸安卓系统的电视,看看它到底有...
全民k系统安卓版下载,一键下载... 你有没有听说最近超级火的全民K系统安卓版下载?没错,就是那个让无数手机用户为之疯狂的系统!今天,我就...
手机中的安卓系统,手机智能生活... 你有没有发现,现在手机里的安卓系统就像是个万能的小助手,无处不在,无所不能呢?它就像是我们生活中的得...
gm8系统是安卓系统吗,安卓生... 你有没有听说过GM8系统?最近这个话题在数码圈里可是挺火的。很多人都在问,GM8系统是安卓系统吗?今...
安卓系统文件非常大,揭秘庞大文... 你有没有发现,最近你的安卓手机越来越卡了?别急,别急,让我来给你揭秘一下这个谜团。没错,就是那个让我...
安卓11系统怎么看,深度解析与... 你有没有发现,你的安卓手机最近是不是变得有点不一样了?没错,安卓11系统已经悄悄地来到了我们的身边。...
安卓p系统是什么,新一代智能体... 你有没有注意到,你的安卓手机最近是不是变得聪明多了?没错,这就是安卓P系统的魔力!今天,就让我带你一...
摩托罗拉安卓13系统,探索创新... 你有没有听说?摩托罗拉的新款手机终于升级到安卓13系统啦!这可是个大新闻,咱们得好好聊聊这个话题。想...
犯罪大师安卓系统在哪下,轻松追... 你有没有听说最近的一款超级火爆的安卓游戏——《犯罪大师》?这款游戏不仅剧情跌宕起伏,角色设定独特,而...
安卓系统升级txt,功能革新与... 你有没有发现,你的安卓手机最近是不是总在提醒你系统要升级了呢?别急,别急,今天就来给你详细说说这个安...
安卓调用系统打开图片,安卓系统... 你有没有遇到过这种情况:手机里存了那么多美美的照片,想分享给朋友,却发现打开图片的步骤竟然那么繁琐?...
安卓不再提示系统更新,轻松告别... 你有没有发现,最近你的安卓手机好像变得特别安静了呢?没错,就是那个一直默默提醒你系统更新的小家伙,它...
安卓系统的如何测试软件,从入门... 你有没有想过,你的安卓手机里那些神奇的软件是怎么诞生的呢?它们可不是凭空出现的,而是经过一系列严格的...
小米8安卓系统版本,安卓系统版... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,小米8这款手机自从上市以来,就凭借着出色...
华为手机安卓系统7以上,创新体... 你有没有发现,最近华为手机越来越受欢迎了呢?尤其是那些搭载了安卓系统7.0及以上版本的机型,简直让人...
儿童英语免费安卓系统,儿童英语... 哇,亲爱的家长朋友们,你是否在为孩子的英语学习发愁呢?别担心,今天我要给你带来一个超级好消息——儿童...
ios系统切换安卓系统还原,还... 你有没有想过,有一天你的手机从iOS系统切换到了安卓系统,然后再从安卓系统回到iOS系统呢?这听起来...
灵焕3装安卓系统,引领智能新体... 你知道吗?最近手机圈里可是掀起了一股热潮,那就是灵焕3这款神器的安卓系统升级。没错,就是那个曾经以独...
安卓系统指南针软件,探索未知世... 手机里的指南针功能是不是让你在户外探险时倍感神奇?但你知道吗,安卓系统中的指南针软件可是大有学问呢!...
华为是不用安卓系统了吗,迈向自... 最近有个大新闻在科技圈里炸开了锅,那就是华为是不是不再使用安卓系统了?这可不是一个简单的问题,它涉及...