python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
@
一.准备工作
大家好,本次使用PyQt5制作一款音乐播放器,简约又大方,支持在线音乐播放以及本地音乐播放,程序我打包好放在了博文后面。
1.PyQt5
PyQt5 是Digia的一套Qt5应用框架与python的结合,同时支持2.x和3.x。本教程使用的是3.x。Qt库由Riverbank Computing开发,是最强大的GUI库之一 。PyQt5是由一系列Python模块组成。超过620个类,6000函数和方法。能在诸如Unix、Windows和Mac OS等主流操作系统上运行。PyQt5有两种证书,GPL和商业证书。官方网站:https://www.riverbankcomputing.com/static/Docs/PyQt5/index.html
可以使用pip工具安装PyQt5
pip install PyQt5
安装Qt Designer图形界面开发工具
pip install PyQt5-tools
2.qtawesome
做过Web前端开发的一定对Font Awesome不会陌生,Font Awesome号称是为Bootstrap设计的完美图标字体,经常出现在各类网页中,非常流行。
这么好的资源,能不能在Qt应用程序中使用呢?答案是肯定的。而且使用起来非常简单。QtAwesome 在 PyQt 和 PySide 应用程序中启用标志性字体,例如 Font Awesome 和 Elusive Icons。它最初是 Rick Blommers的QtAwesome C++ 库的 Python 端口。
使用pip工具安装qtawesome
pip install qtawesome
二.预览
1.启动
启动后系统会自动推荐歌曲,加载一系列的歌曲、歌单。
2.歌曲搜索
搜索后,会展示对应的搜索结果,双击歌名就能够开始播放,另外还可以收藏、下载(歌曲、歌词)、定位当前播放音乐、分享音乐链接。
3.歌曲播放
这里使用一张gif动图演示音乐播放的效果,播放器下面的黑色背景是我的电脑桌面,上面是桌面歌词。
4.评论查看
评论有两种排序,最新和最热,最新是根据评论时间排序,最热是根据点赞数量排序,其中,最新排序支持翻页查看操作,评论内容是可以复制的。
5.自定义背景
在设置中可以选择一张图片作为播放器背景图。
6.设置-基本设置
在此窗口可以对播放器的一些基本参数进行设置,主要包括音乐引擎、个性颜色、背景图片等(设置窗口我没有去进行个性QSS设计,仅是实现了相关功能)。
7.设置-高级设置
高级设置包括默认下载位置设置、定时任务创建。
8.定时任务
本次创新性地加入了定时任务,用户可以手动开启定时任务,通过选择定时时间、任务类型,在第五部分定时任务部分有详细介绍
三.设计流程
1.窗口组成
主要由四个窗口组成,各个窗口相互协同,实现指定的功能。ps:桌面歌词显示也是一个窗口哦~
2.主要功能结构
使用XMind画了几张思维导图,便于了解本篇软件的主要功能。
3.UI设计
哈哈,是不是觉得很丑,这里我把所有用到的窗口堆叠到了一起,通过点击按钮,实现对应窗口的隐藏于展示,继而实现相应功能。使用QT Designer设计UI界面,免去了很多代码的撰写,也方便修改。
四.代码函数概览
五.几个重点
1.音乐播放
音乐播放的操作都是通过鼠标双击执行对应槽函数,这里着重说一下,(在线)歌曲的播放逻辑:鼠标双击QTablewidget的一行->获取歌曲id、图片id以及歌词信息->将当前歌曲以及作者姓名显示在QLabel->将歌曲添加到QPlayerList中->最后QPlayer开始播放。可能有同学会好奇,table上没有显示歌曲id、图片id啊,其实我用setColumnHidden()函数给隐藏了,同理播放本地音乐时,本地音乐文件路径也给隐藏了。
2.定位当前播放音乐
因为播放的音乐会在主界面QLabel上显示,先获取标签上的文字(记为目标),将当前播放的音乐名称用字符串切割出来(分隔符为-),再使用QTablewidget的findItems()函数,查找模式为Qt.MatchExactly(精确模式,文字完全匹配才符合要求),返回值为list,得到一些QTablewidgetItem,然后遍历这些item,获取它们的行号,获取所属行号的歌名以及歌手名,最后使用-符号连接起来,和目标文字进行比对,若完全相同,则使用setCurrentItem()选中此行,退出循环,完成定位。
3.歌词显示
首先请求网络上的歌词数据,将得到的歌词数据进行格式化,格式类似于[{"time":1000,"lyric":"示例歌词"}],解释一下:每段歌词都在一个字典里,字典的time是当前歌词所属时间(单位:毫秒),lyric为歌词,最后每段歌词构成歌词列表。将QPlayer的positionChanged信号绑定到指定的槽函数中,此槽函数根据当前播放进度,动态计算当前播放歌词并且高亮,展示前后共10句歌词,使用信号与槽机制,将当前播放的歌词,emit到歌词窗口,此窗口背景透明,置于桌面任务栏之上并且置于顶层,使用QSS设置当前歌词的样式,实时地展示出来。
4.定时任务
绑定checkbox的toggled事件,使用spinbox设置计时总时间(单位:分),使用combobox选择定时任务的种类。使用QTimer,设置timer的计时间隔为1秒,每隔一秒将counter计数器加一,计算剩余时间,当剩余时间为0(计数器为0)时,执行相应的定时任务。
六.总结
本次使用PyQt5开发了一款音乐播放器,支持在线音乐、本地音乐播放、歌词显示、评论查看以及定时任务设置等功能,整体实现路线比较曲折,也参考了大量的QT5相关文章(C++),软件是占用我的碎片时间开发的,创作实属不易,能点个赞吗?
七.参考
QMediaPlayer的相关函数:
QToolButton的小图标的使用:
QTableWidget表头添加QCheckBox:
歌词滚动展示:
窗口透明度设置:
定时任务QTimer的使用:
同款软件get:百度云密码:8888
python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)的更多相关文章
- 使用python打造一款音乐播放器
作者qq:64761294 编程/考试交流群:834531270 欢迎交流 核心播放模块(pygame内核) import time import pygame import easygui as g ...
- 躁!DJ 风格 Java 桌面音乐播放器
本文适合有 Java 基础知识的人群,跟着本文可学习和运行 Java 版桌面 DJ 音乐播放器. 本文作者:HelloGitHub-秦人 HelloGitHub 推出的<讲解开源项目>系列 ...
- NABCD分析java音乐播放器
程设计题目:java音乐播放器 一.课程设计目的 1.编程设计音乐播放软件,使之实现音乐播放的功能. 2.培养学生用程序解决实际问题的能力和兴趣. 3.加深java中对多媒体编程的应用. 二.课程设计 ...
- Android音乐播放器的设计与实现
目录 应用开发技术及开发平台介绍 应用需求分析 应用功能设计及其描述 应用UI展示 一.应用开发技术及平台介绍 ①开发技术: 本系统是采用面向对象的软件开发方法,基于Android studio开发平 ...
- 团队项目 NABCD分析java音乐播放器
NABCD分析java音乐播放器 程设计题目:java音乐播放器 一.课程设计目的 1.编程设计音乐播放软件,使之实现音乐播放的功能. 2.培养学生用程序解决实际问题的能力和兴趣. 3.加深java中 ...
- Linux常用音乐播放器
1.Rhythmbox是一个音乐播放和管理应用,GNOME桌面环境自带,它可以播放各种音频格式的音乐管理收藏的音乐.同时还具有音乐回放.音乐导入.刻录音频CD.显示专辑封面.显示歌词.DAAP共享等功 ...
- C# 一款属于自己的音乐播放器
本文利用C# 调用Windows自带的Windows Media Player 打造一款属于自己的音乐播放器,以供学习分享使用,如有不足之处,还请指正. 概述 Windows Media Player ...
- 一款非常简单的android音乐播放器源码分享给大家
一款非常简单的android音乐播放器源码分享给大家,该应用虽然很小,大家常用的播放器功能基本实现了,可能有点还不够完善,大家也可以自己完善一下,源码在源码天堂那里已经有了,大家可以到那里下载学习吧. ...
- 使用react native制作的一款网络音乐播放器
使用react native制作的一款网络音乐播放器 基于第三方库 react-native-video设计"react-native-video": "^1.0.0&q ...
- ubuntu下一款有点感觉的 linux音乐播放器 clementine(小橘子))
https://www.clementine-player.org/ 在linux听音乐的感觉确实不是很好,音乐播放器很多.但是仅仅只是数量上的优势,在确实不是很好用.自带的rhythmbox确实很占 ...
随机推荐
- k8s pod 抓包
首先安装tcpdump: yum install tcpdump kubectl get pod -o wide查看pod在哪个节点上 docker ps 查看container的id 查看pid: ...
- jmeter测试工具安装篇
安装jmeter之前需要安装Java环境 window系统安装java 下载jdk 安装前我们需要下载java开发工具包JDK,下载地址:http://www.oracle.com/technetwo ...
- Java script Date和长整型互换
document.write(new Date().getTime()); document.write('<br/>') var date1=new Date(1590024428000 ...
- sublime json格式化
1. 插件安装 install package-->pretty json 2. 快捷键设置 设置(preference):热键设置 [ {"keys": ["al ...
- python3 小知识
本博客分为三部分,一是字典和函数结合,代替if-else判断语句:二是数组的元素带有括号:三是完整代码.图片略多. 1. 字典和函数结合,代替if-else判断语句 写函数时经常会遇到一个函数的某 ...
- sos 扩展命令文档
https://learn.microsoft.com/zh-cn/dotnet/framework/tools/sos-dll-sos-debugging-extension?redirectedf ...
- mybatis -plus基础
- 基础篇之Markdown基础语法
标题 1. # + 空格 + 标题名字 → 一级标题 2. ## + 空格 + 标题名字 → 二级标题 3. ### + 空格 + 标题名字 → 三级标题 ...... 6.###### + 空格 + ...
- 【Python】Python多进程练习
1,进程启动 通过Process方法启动,通过下面的代码执行结果,可以发现,开启的进程与WHILE循环语句会同时进行. 为什么呢?因为都是启动了进程在运行程序. from time import sl ...
- python 实现两个多维数组去重处理
a = [[1,2,3,4],[5,6,7,8],[11,12,13,14],[23,24,12,11]] b = [[5,6,7,8],[23,24,12,11]] c = [] for i in ...