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.启动

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
启动后系统会自动推荐歌曲,加载一系列的歌曲、歌单。

2.歌曲搜索

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
搜索后,会展示对应的搜索结果,双击歌名就能够开始播放,另外还可以收藏、下载(歌曲、歌词)、定位当前播放音乐、分享音乐链接。

3.歌曲播放

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
这里使用一张gif动图演示音乐播放的效果,播放器下面的黑色背景是我的电脑桌面,上面是桌面歌词。

4.评论查看

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
评论有两种排序,最新和最热,最新是根据评论时间排序,最热是根据点赞数量排序,其中,最新排序支持翻页查看操作,评论内容是可以复制的。

5.自定义背景

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
在设置中可以选择一张图片作为播放器背景图。

6.设置-基本设置

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)

在此窗口可以对播放器的一些基本参数进行设置,主要包括音乐引擎、个性颜色、背景图片等(设置窗口我没有去进行个性QSS设计,仅是实现了相关功能)。

7.设置-高级设置

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
高级设置包括默认下载位置设置、定时任务创建。

8.定时任务

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
本次创新性地加入了定时任务,用户可以手动开启定时任务,通过选择定时时间、任务类型,在第五部分定时任务部分有详细介绍

三.设计流程

1.窗口组成

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
主要由四个窗口组成,各个窗口相互协同,实现指定的功能。ps:桌面歌词显示也是一个窗口哦~

2.主要功能结构

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
使用XMind画了几张思维导图,便于了解本篇软件的主要功能。

3.UI设计

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)
哈哈,是不是觉得很丑,这里我把所有用到的窗口堆叠到了一起,通过点击按钮,实现对应窗口的隐藏于展示,继而实现相应功能。使用QT Designer设计UI界面,免去了很多代码的撰写,也方便修改。

四.代码函数概览

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)

五.几个重点

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++),软件是占用我的碎片时间开发的,创作实属不易,能点个赞吗?

python3GUI--打造一款音乐播放器By:PyQt5(附下载地址)

七.参考

QMediaPlayer的相关函数:

QT学习之QMediaPlayer
;

QToolButton的小图标的使用:

qtawesome的Icon Browser使用方法

QTableWidget表头添加QCheckBox:

Pyqt5 QTableWidget/QTableView 行表头添加复选框全选功能

歌词滚动展示:

基于Qt的网络音乐播放器(五)实现歌词滚动显示

窗口透明度设置:

PyQt5 – 窗体透明度+窗体背景透明

定时任务QTimer的使用:

PyQt5高级界面控件之QTimer(十一)

同款软件get:百度云密码:8888

Original: https://www.cnblogs.com/a1397852386/p/15729826.html
Author: 懷淰メ
Title: python3GUI–打造一款音乐播放器By:PyQt5(附下载地址)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/643564/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 查找文本文件中重复的汉字

    查找文本文件中重复的汉字,找到在所在行号 文本文件格式 大 小 多 少 前 后 左 …… text.py import os import re list = [] sam…

    技术杂谈 2023年5月31日
    0134
  • 63.殉情的抹香鲸

    sdfds posted @2022-09-28 08:36 随遇而安== 阅读(24 ) 评论() 编辑 Original: https://www.cnblogs.com/55…

    技术杂谈 2023年6月21日
    0105
  • Red Hat dhclient

    如果你是通过dhcp动态获取ip进行上网,我们一般情况下需要对/etc/sysconfig/network-scripts目录下对应的网卡配置进行修改,将BOOTPROTO改为dh…

    技术杂谈 2023年6月1日
    076
  • openpyxl使用总结

    设置表头单元格的颜色 fill = PatternFill("solid", fgColor=’FF000000′) font = Font(color=’00…

    技术杂谈 2023年6月21日
    083
  • 使用Gulp和Browserify来搭建React应用程序

    对React有一定了解之后,我们知道,需要把JSX文件转换成JS文件,组件需要导入导出。本篇就体验使用Gulp把JSX文件转换成JS文件,使用Browserify来把组件捆绑到一个…

    技术杂谈 2023年5月31日
    0126
  • fiddler抓取手机上https数据失败,全部显示“Tunnel to……443”解决办法

    与后端数据通信是前端日常开发的重要一环,在与后端接口联调的时候往往需要通过查看后端返回的数据进行调试。如果在PC端,Chrome自带的DevTools就已经足够用了,Network…

    技术杂谈 2023年5月30日
    094
  • HTB靶场记录之Jarvis

    1、靶机介绍 这次的靶机是Jarvis,很适合练手,难点在提权。 2、信息收集 这里我先用autorecon进行信息收集。 Autorecon集成nmap,nikto等操作可以比较…

    技术杂谈 2023年5月31日
    075
  • PYTORCH: 60分钟 | 神经网络

    神经网络可以使用 torch.nn包构建。 现在你已经对autograd有所了解, nn依赖 autograd 定义模型并对其求微分。 nn.Module 包括层,和一个返回 ou…

    技术杂谈 2023年7月25日
    053
  • one-stage object detectors(1)

    2019/04/08 强烈推荐:深入理解one-stage目标检测算法 yolo系列 one-stage object detectors(YOLO and SSD) 在不专一的模…

    技术杂谈 2023年6月1日
    0110
  • 入住感言

    希望我的博客真的可以帮助到别人,也希望自己能够坚持下去。这些年回想起来,我经常做的事就是感动自己。我并没有自己想象的这么努力,虚有其表罢了!几年后的今天希望自己不会在这么想,唯有时…

    技术杂谈 2023年7月11日
    057
  • Jenkins安装(Docker)版

    一、jenkins安装 1.查找,下载jenkins镜像文件 启动docker,查找Jenkins镜像文件 docker search jenk…

    技术杂谈 2023年7月11日
    060
  • linux系统编码修改

    查看当前系统默认采用的字符集locale 查看系统当前编码echo $LANG如果输出为:en_US.UTF-8 英文zh_CN.UTF-8 中文 查看系统是否安装中文字符集loc…

    技术杂谈 2023年7月11日
    078
  • WebSocket

    WebSocketConfig.java /** * WebSocket配置类 * @author admin *…

    技术杂谈 2023年6月21日
    094
  • 变通

    页面后端的RestController调用远程RPC得到一个List对象集合。页面上要展示name,而List里的DTO的类型里只有id没有name,这时,页面可以变通处理。而不一…

    技术杂谈 2023年7月11日
    065
  • SQL存储过程

    — 创建存储过程 (无参)create procedure sp_pro1() select count(*) from student; — 调用存储过程…

    技术杂谈 2023年7月25日
    066
  • Servlet4.0 Response

    Servlet4.0 Response对象 Response对象封装Server返回Client的所有信息。在HTTP协议中,Server传达给Client信息转换到HTTP He…

    技术杂谈 2023年7月25日
    063
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球