前言

本文给大家分享的是如何通过利用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学习路线图(告别不入流的学习)

【脚本项目源码】Python制作多功能音乐播放器,打造专属你的音乐播放器相关推荐

  1. 【脚本项目源码】Python制作艺术签名生成器,打造专属你的个人艺术签名

    前言 本文给大家分享的是如何通过利用Python制作艺术签名生成器,废话不多直接开整~ 开发工具 Python版本: 3.6 相关模块: requests模块 PIL模块 PyQt5模块 环境搭建 安 ...

  2. 【脚本项目源码】Python制作桌面宠物,这么可爱的萌宠你不想拥有吗?

    前言 本文给大家分享的是如何通过利用Python制作桌面宠物,废话不多直接开整~ 开发工具 Python版本: 3.6 相关模块: random模块 os模块 cfg模块 sys模块 PyQt5模块 ...

  3. 【脚本项目源码】Python制作提升成功率90%的表白神器

    前言 明天就是拥抱情人节,情侣们会在公开的场合拥抱,向世人宣告你俩的爱意,也让这个寒冷的冬天变得格外温馨.到了年底依然能热情拥抱,也见证了两人情意如昔. 今天小鱼就给大家带来就是的利用Python制作 ...

  4. 一个完整的python项目源码-Python实例练手项目汇总(附源码)

    #_*_ coding:utf-8 _*_ from tkinter import * importrandomimporttimeimporttkinter.messagebox#俄罗斯方块界面的高 ...

  5. 网上的很多Android项目源码有用吗?Android开发注意的地方。

    在Android项目开发中,我们可以在网上看到很多项目源码,大部分也不是很精致, 比如 06.Android阿福多媒体播放器开发教程+源码 还有什么浏览器源码. 那么这些有用吗?  价值在哪里? 精致 ...

  6. python脚本删除源码注释

    原文出处: 吴秦的博客 在大概3个月之前,Python对我来说一直是个迷.然而,就在3个月前我经理给我一个任务--删除(替换)所有项目源码文件中包含特定几行内容的所有注释.整个项目源码的大小有1G,在 ...

  7. part1:推荐一些适合练手、课程设计、毕业设计的python小项目源码,无任何下载门槛

    人生苦短,我用python,随着python这些年的流行,很多人开始使用python来实现各种功能.下面推荐一些适合用来练手.大学生课程设计作业.大学生毕业设计的python小项目,尤其适合新手,源码 ...

  8. 基于Python的旅游管理系统微信小程序设计与实现毕业论文+项目源码及数据库

     源码获取:我的博客资源页面可以下载!!!! 项目名称 基于Python的旅游管理系统微信小程序设计与实现毕业论文+项目源码及数据库 系统说明 本商业旅游系统可以分为三个部分,即微信小程序的手机客户端 ...

  9. javaWeb基于SSM框架开发的社区医疗数据管理系统【项目源码+数据库脚本+报告】

    一.项目简介 本项目是一套基于SSM框架开发的社区医疗数据管理系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者. 包含:项目源码.数据库脚本等,该项目可以直接作为 ...

最新文章

  1. GROMACS运行参数之md.mdp文件详解
  2. (转)spring源码解析,spring工作原理
  3. VS2012编译PCL1.70的过程
  4. 使用Spock测试您的代码
  5. python根据文件路径获取上级目录路径
  6. 蓝牙适配器 能同时接多少个设备_便携音箱也能有立体环绕声,JVC智能蓝牙颈挂音箱体验...
  7. svg 地图_找地图素材?有这个网站就够了!
  8. 如何编写自定义的Web控件
  9. VB.net取整和模操作
  10. c语言编程实现基2-fft,fft算法研究及基2fft算法的c语言实现.doc
  11. 华为数据存储用户精英论坛,信心与合作的故事
  12. 3D中的OBJ文件格式详解
  13. 企业微信群:机器人实现定时提醒功能
  14. 十行 Python 代码就提取了韦小宝的身份证信息
  15. 等保合规 等保监测 等保合规评测
  16. linux lzma 函数 调用,Lzma(7-zip)和zlib
  17. 年轻人,劝你不要做前端
  18. 未来五年,做淘宝电商不做好私域流量,将寸步难行!
  19. css3和html5网站模板
  20. 51单片机入门——矩阵键盘(附51代码)

热门文章

  1. 人们误解了数学家吗?是的!
  2. 若平衡二叉树的高度为6,且所有非叶结点的平衡因子均为 1,则该平衡二叉树的结点总数为( )。 12 20 32 33
  3. VIP邮箱登录入口有哪些?2022年邮箱会员如何注册?
  4. 你不是不努力,但成功的为什么不是你?
  5. 软件测试之测试经理篇
  6. python操作微信电脑版_Python学习教程:教你用Python通过微信来控制电脑摄像头
  7. php流量图形化,用php引用cacti中的网络流量图表
  8. python爬虫教程,带你抓取百度的高清摄影图片
  9. catia之车灯设计——加厚
  10. 小区物业管理系统(JSP+SqlServer)