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)

大家都在看

  • 【cartogarpher_ros】三:发布和订阅雷达scan信息

    上一节介绍和测试了cartographer的官方demo。 本节会编写ros系统中,最常用的激光雷达LaserScan传感数据的订阅和发布,方便在cartographer中加入自己…

    技术杂谈 2023年7月24日
    081
  • 单点登录(SSO)

    1 基础知识 单点登录机制(SSO)允许用户登录应用程序一次,并访问所有相关的系统,而不需要单独登录它们。 由于 SSO,用户只需登录一次即可使用服务,并自动登录到所有相关应用程序…

    技术杂谈 2023年7月23日
    091
  • 微软拼音输入法删除

    以 win10 21H1 为例说明,其他win10版本也大同小异,不再赘述。 主要设置位置在:设置—-时间和语言—-语言—-首选语言(选项)&#…

    技术杂谈 2023年5月31日
    0106
  • Dapr 1.7 之 Unix Domain socket 他来了

    A UNIX socket is an inter-process communication mechanism that allows bidirectional data e…

    技术杂谈 2023年5月30日
    062
  • []企业的生命周期总结提炼

    [原创]企业的生命周期总结提炼 [原创]企业的生命周期总结提炼 企业生命周期,通常可以分为初创期、成长期、成熟期、衰退期等四个阶段。 做企业一定要”顺势而为&#8221…

    技术杂谈 2023年5月30日
    0126
  • 企业级开发平台的演进

    过去几年中,现代软件开发的整体环境发生了巨大的变化。回想在 2000 年代初期,产业的发展并没有那么快,技术和框架只是在稳步前进。而现在,技术发展的复杂度和多样性已经可以用超音速来…

    技术杂谈 2023年6月21日
    0119
  • 通过过滤器实现前后端分离的跨域问题

    跨域指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。在做前后端分离项目的时候就需要解决此问题。 创建过滤器解决跨域问…

    技术杂谈 2023年7月11日
    062
  • Elasticsearch-基础介绍及索引原理分析

    转:https://www.cnblogs.com/dreamroute/p/8484457.html 介绍 Elasticsearch 是一个分布式可扩展的实时搜索和分析引擎,一…

    技术杂谈 2023年5月31日
    0114
  • 用DirectX实现多视图渲染

    什么是多视图 一般的3D程序都只有一个视图,对应整个窗口的客户区。多视图就是在一个窗口中放置多个视图,以便从不同的角度观察模型或者场景。很多图形软件都有这个功能,比如大家熟知的3D…

    技术杂谈 2023年5月31日
    065
  • 使用plantuml,业务交接就是这么简单

    使用plantuml,业务交接就是这么简单 你好,我是轩脉刃。 最近交接了一个业务,原本还是有挺复杂的业务逻辑的,但发现交接过来的项目大有文章,在项目代码中有一个docs文件夹,里…

    技术杂谈 2023年6月1日
    096
  • Nodejs与管道和信号

    Nodejs与管道 Linux的其中一个设计哲学就是小而精,一个程序只做一件事情,然后通过管道将多个程序连接起来完成复杂的任务。比如如下的命令:ps -ef | grep node…

    技术杂谈 2023年5月31日
    087
  • Linux 的基本操作 -权限

    Linux 的基本操作 -权限 权限:文件的属性: d:表示目录-:表示文件 l:连接文件 b:设备文件,提供存储的接口设备 c:设备文件,提供串行的接口设备–键盘,鼠…

    技术杂谈 2023年7月24日
    069
  • 基于DDD领域建模思想、COLA开源架构和CQRS模式设计和构建货物运输系统

    2003年,DDD(领域驱动设计)这一软件开发的方法与愿景经由建模专家 Eric Evans 的经典著作Domain-Driven Design: Tackling Complex…

    技术杂谈 2023年6月1日
    0113
  • MVCC简介

    一、MVCC简介 MVCC (Multiversion Concurrency Control),即多版本并发控制技术,它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据…

    技术杂谈 2023年6月1日
    097
  • 数据仓库与hive

    数据仓库与hive hive—— 数据仓库建模工具之一 一、数据库、数据仓库 1.1 数据库 关系数据库本质上是一个二元关系,说的简单一些,就是一个二维表格,对普通人来说,最简单的…

    技术杂谈 2023年7月11日
    050
  • gerrit系统如何配置访问控制

    .版本:v0.3作者:河东西望日期:2022-7-13. gerrit系统的上手使用有两个难点: 想要上手使用gerrit的同仁们,搭建部署好gerrit系统之后,会发现gerri…

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