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确实很占 ...
随机推荐
- scrcpy不使用adb远程控制android
1.开启服务器 CLASSPATH=/data/local/tmp/scrcpy-server.jar app_process / com.genymobile.scrcpy.Server 1.23 ...
- 关于右值 std::move
今天发现一个情况,对容器map 进行 std::move 之后,原map被清空了. map<int, int> tmp; tmp[1] = 1; tmp[2] = ...
- twenty two
打包处理less文件 1,运行npm i less-loader@10.0.1 less@4.1.1 -D 2, 在webpack.config.js的module->rules数组中 rule ...
- nginx 日志分析之 access.log 格式详解
说明:access.log 的格式是可以自己自定义,输出的信息格式在nginx.conf中设置 一般默认配置如下: http { ... log_format main '$remote_addr - ...
- 物理机安装mysql8, 修改数据库目录
自动安装mysql ,并修改数据库目录. #! /bin/bash #mysql官方下载路径:https://dev.mysql.com/downloads/mysql/ # 配置dnf源 mkdir ...
- 【Windows】IP 地址变为 169.254.x.x 的解决方法
最近每次开机 IP 地址都会自动跳至 169.254.x.x 段,连接不上网络,设置了固定 IP 也会跳段.因此找到以下解决方法: 『IP地址变成169.254.x.x 和固定ip两个IP地址的解决办 ...
- wpf treeview 绑定图标方式
<TreeView Grid.Row="0" Grid.Column="0" x:Name="foldersItem" Selecte ...
- Linux安装证书
Linux安装 vCenter root CA: 1.访问vCenter管理页面,下载"下载受信任的根 CA 证书" 2.压缩文件内带有数字作为扩展名(.0..1 等)的文件是根证 ...
- Vmware workstation虚拟机导入到esxi虚拟机
VMware Workstation 与 ESXi 的主要区别 VMware Workstation是直接在windows系统下安装软件,安装后再在软件里面安装虚拟机,而ESXi相当于一个linux操 ...
- 摹客RP,编辑界面缩放比例支持手动输入!
Hello,小伙伴们,又到了摹客的新功能播报时间. 本月更新,摹客RP编辑界面缩放比例支持手动输入,并对部分组件的默认样式及属性进行了优化:摹客DT率先上线了3款黄金比例图层,辅助设计师更高效绘图:针 ...