python3GUI--new音乐播放器!By:PyQt5(附下载地址)

文章目录

  • 一.前言
  • 二.展示
    • 1.启动
    • 2.MV推荐
    • 3.专辑详情页
    • 4.歌手详情页
    • 5.搜索结果页
    • 6.歌曲播放页
    • 7.我喜欢歌曲页
    • 8.我喜欢专辑页
  • 三.思路&启发
    • 1.布局
    • 2.细节
    • 3.组件复用
    • 4.项目结构
    • 5.优化速度
      • 1.Nuitka
        • 1.显著提高性能:
        • 2.减小程序体积:
        • 3.增强安全性:
      • 2.采用缓存机制
      • 3.页面索引记录
  • 四.食用方法
  • 五.总结


欢迎下载体验!

文件大小:72.03M
下载地址:https://wwt.lanzoul.com/iTWDU25p2oih

一.前言

大家好呀,之前预告过了,近期要发一款新的音乐播放器,保证亮眼!本次使用PyQt5开发一款主打听欧美风歌曲的音乐播放器,软件包含多个页面,支持歌词描边、帅气的播放页,让我们拭目以待!对了,有的读者说我的博客图太多了,最好是能多写一些开发思路,本篇全是干货,请大家放心阅读。

二.展示

1.启动

本次的音乐播放器主打简约风。经过一个splash之后进入我们的软件主页,首页包含多个模块,分别是专辑推荐、单曲推荐、MV推荐、歌手排行。
在这里插入图片描述

首页下方是歌手排行模块
在这里插入图片描述

2.MV推荐

MV推荐页面随机推荐MV内容,每个内容都是可以点击播放的~
在这里插入图片描述

3.专辑详情页

专辑详情页和歌手详情页头部背景均采用封面模糊化处理

在这里插入图片描述

4.歌手详情页

歌手详情页内部包含多个tab,均可点击,在此不再赘述。

在这里插入图片描述

5.搜索结果页

搜索结果页包含多个类别
在这里插入图片描述

6.歌曲播放页

本次的歌曲播放页经过精心设计,包括明暗两种配色。
在这里插入图片描述
在这里插入图片描述

7.我喜欢歌曲页

在这里插入图片描述

8.我喜欢专辑页

在这里插入图片描述

三.思路&启发

1.布局

本次开发仍然脱离了QT设计师,所有ui内容都是手搓出来的,拿主界面举个例子,我们把主界面分成多个区域:整体在一个widget上,然后防止堆叠组件,使用不同的“页”控制内容的展示,整体是垂直布局,上方为水平布局,内部为垂直布局,将我们的界面拆成不同的区域(类),方便管理与测试,最后把每个部分拼接起来,实现各自的功能,构成我们软件的主体。
在这里插入图片描述
老是有朋友问,左侧导航栏控制右侧展示不同内容的需求如何实现,在此介绍一下我的思路把:用按钮+堆栈布局(组件)即可,使用按钮控制堆栈组件(布局)的索引,展示不同的内容。
同理,播放页亦是如此。
在这里插入图片描述

2.细节

本次增加了许多细节,我来列举一下吧:
1.页面切换效果使用动画
2.无边框+阴影+可调整大小窗口
3.窗口全屏\恢复切换动画
4.歌名(歌手名)滚动效果
5.专辑(歌手详情)背景模糊效果
6.播放页歌词滚动效果
7.特色桌面歌词
8.特色对话框

3.组件复用

为了我们的软件整体风格统一,我这边定义了多个按钮类和标签类,它们具有相同的属性,将配置写入单独的配置文件里,统一管理图标与颜色及样式。

4.项目结构

PyQt5项目并没有一个规范的项目同一结构,下图是我们项目的项目结构 run.pyw是我们软件的入口,其他目录见名知意。
在这里插入图片描述

5.优化速度

本次从代码层面对软件的启动速度、响应速度进行优化:具体来说是:

1.Nuitka

Nuitka优点大致如下:

1.显著提高性能:

Nuitka 通过将 Python 代码编译成二进制格式,可以显著提高程序的执行速度。由于 C++ 代码的执行效率通常高于 Python 解释器,因此编译后的程序在执行时会更加快速,能够更有效地利用系统资源。

2.减小程序体积:

相比其他打包工具,Nuitka 生成的执行文件通常体积更小。这是因为 Nuitka 在编译过程中会优化代码,去除不必要的部分,并将多个模块合并成一个紧凑的可执行文件。

3.增强安全性:

将 Python 代码编译成二进制格式还可以增强程序的安全性。由于攻击者难以直接查看或修改编译后的代码,因此逆向工程或篡改程序的难度大大增加。

2.采用缓存机制

在软件根目录/data/cache/cover下缓存着界面加载的封面数据,因为我们耗时操作大多是由访问接口以及加载封面造成的,访问接口采用线程的方式,在子线程里进行耗时操作,加载图片时,先检测本地是否存在图片,有的话直接从本地读取,否则加载网路图片展示到界面上,之后把图片混存到本地,所以我们软件根目录是越来越大的,用户可以定期清理缓存数据优化存储空间。

3.页面索引记录

我们的主界面以及子界面是用堆栈组件构成的,比如我们首次点击排行榜页面,需要加载每个排行榜的数据,当我们在此切换到这个页面时,由于已经加载过了,就不会再产生网络请求重复加载了,同理:搜索结果页、歌手详情页…都用了这个思想。

四.食用方法

安装时,请避免中文、带空格的目录!
本次开发软件依赖外部接口,具体来说是依赖node.js提供的接口服务,不过无需担心,笔者已经打包好了。
windows用户首先双击运行kill&start.bat,待黑框显示本地服务地址(一般是http://localhost:3000
然后双击exe启动软件即可。

五.总结

本次和大家分享了我使用PyQt5开发的新音乐播放器,清新的界面你一定会喜欢!欢迎大家下载尝试!
近期应该是不会再开发新的播放器了,项目重心放到别的上面了,有时间会和大家分享的!

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/50856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java集合框架2024最通俗易懂(图片超全)

集合 1.1、定义 集合就是类型统一的数据组合而成的数据结构,该数据结构可以任意的改变长度。 1.3、Set Set数据存储结构,无序,且不可以重复,元素可以为null,但是也只能出现一次,如下图: 1.3.1、HashSe…

WEB渗透Web突破篇-SQL注入(Oracle)

版本 SELECT user FROM dual UNION SELECT * FROM v$version数据库名 SELECT global_name FROM global_name; SELECT name FROM V$DATABASE; SELECT instance_name FROM V$INSTANCE; SELECT SYS.DATABASE_NAME FROM DUAL;列库 SELECT DISTINCT owner FROM all_tables;列表 …

rag输出了幻觉怎么办

首先,幻觉也分类型。 一个是事实性幻觉,就是LLM凭借自身能力回答问题,但是这个回答是编的,也可能有正确答案但是LLM输出错了。总之这是LLM自身原因。 另一个是忠实性幻觉,就是你要求LLM根据你给的材料给出答案&#xf…

Scikit-learn提供了哪些机器学习算法以及如何使用Scikit-learn进行模型训练和评估

Scikit-learn库的使用 一、Scikit-learn提供的机器学习算法 Scikit-learn(通常简称为sklearn)是一个广泛使用的Python机器学习库,它提供了多种用于数据挖掘和数据分析的算法。Scikit-learn支持的机器学习算法可以大致分为以下几类&#xff…

[240726] Mistral AI 发布新一代旗舰模型 | Node.js 合并 TypeScript 文件执行提案

目录 Mistral AI 发布新一代旗舰模型:Mistral Large 2Node.js 合并 TypeScript 文件执行提案:--experimental-strip-types Mistral AI 发布新一代旗舰模型:Mistral Large 2 Mistral AI 宣布推出新一代旗舰模型 Mistral Large 2,该…

算法-----递归~~搜索~~回溯(宏观认识)

目录 1.什么是递归 1.1二叉树的遍历 1.2快速排序 1.3归并排序 2.为什么会用到递归 3.如何理解递归 4.如何写好一个递归 5.什么是搜索 5.1深度(dfs)优先遍历&优先搜索 5.2宽度(bfs)优先遍历&优先搜索 6.回溯 1.什…

Temu测评自养号如何做?三分钟带你入门!

环境系统 现在市场上很多的系统都是现成的或软件包,没有解决风控的能力,如果有需要建议大家自己学习一套技术,把技术掌握在自己手里,这样不会有依赖性 手机端环境:越狱后的ios指定版本手机可以一键新机的系统(参数调试)独享的家…

梧桐数据库:子查询优化技术

在数据库技术中,子查询是一个强大的工具,但不加优化的子查询可能会导致性能问题。优化子查询可以显著提升查询效率。以下是一些常见的子查询优化技术: 1. 使用连接(JOIN)替代子查询 1.1 基本原理 很多情况下&#x…

【NLP自然语言处理】为什么说BERT是bidirectional

首先,来看一下Transformer架构图: 我们知道,Bert设计时主要采用的是Transformer编码器部分,要论述Bert为啥是双向的,我想从编码器和解码器的注意力机制来阐述。 在看这篇博客前,需要对Transformer有一定的…

[C++] vector入门迭代器失效问题详解

文章目录 vector介绍**vector iterator 的使用** vector迭代器失效问题由扩容或改变数据引起的迭代器失效reserve的实现(野指针)insert实现(迭代器位置意义改变)insert修改后失效的迭代器 it迭代器失效 erase后的问题总结&#xf…

nextjs当后端使-读取excel文件

目前nextjs有种php的感觉,现在的需求是读取excel文件,入数据库,拆分出读取excel的代码如下: import { NextRequest } from "next/server"; import { join } from "path"; import { readFile } from "fs…

MyBatis-Plus的基本使用(一)

目录 前言 特性 MyBatis-Plus入门案例 常用注解 小结 前言 这篇文章主要来学习MyBatis-Plus这个非常强大的框架. 在学习MyBatis-Plus之前,需要有MyBatis的学习基础.因为MyBatis -Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变&#x…

spring —— 全注解实现事务管理器

全注解实现事务管理,就是取消 spring-config.xml 文件,而将配置信息在配置类中实现。 配置类: package com.spring.book;import com.alibaba.druid.pool.DruidDataSource; import org.springframework.context.annotation.Bean; import org…

中英双语简单介绍:字典学习(Dictionary Learning)

中文版 字典学习(Dictionary Learning)是一种机器学习技术,用于从数据中学习一组基元(称为“字典”),以便能够用这些基元来表示数据。该方法特别适用于稀疏表示(Sparse Representation&#xf…

Prometheus通过注册中心nacos、Eureka 实现服务注册自动发现监控

Prometheus通过注册中心nacos、Eureka 实现服务注册自动发现监控 Prometheus通过Eureka 实现服务注册自动发现监控 使用 Prometheus 中的 Eureka (Service Discover)SD 来使用 Eureka REST API 来查询抓取目标。 Prometheus 将定期检查 REST 端点并为每个应用程序实例创建一个…

环境激活的艺术:Conda激活命令全解析

🌐 环境激活的艺术:Conda激活命令全解析 Conda作为Python编程生态中一个不可或缺的包管理器和环境管理器,为开发者提供了一个强大的工具来创建、管理并隔离不同的工作环境。本文将详细解释如何在Conda中使用conda activate命令来激活环境&am…

【Java Bean 映射器】通过 MapStruct 和 BeanUtils 拷贝对象的区别

目录 👋前言 👀一、环境准备 🌱二、拷贝工具使用 2.1 BeanUtils 使用 2.2 MapStruct 使用 💞️三、对比 📫四、章末 👋前言 小伙伴们大家好,最近在一些技术文章中看到了开发时经常接触的对…

面向对象·回顾;万类之祖object;抽象类Abstract。

回顾面向对象 类与对象 类--------(instance实例化对象)-------->对象 类图 调出你public方法–接口 访问控制符 常用private,public。 封装 可见性本类包不同包private✓✕✕不写dafalt(默认)✓✓✕protected✓✓继承✓public✓✓✓…

【工具类】Excel转图片

import com.spire.xls.Workbook; import com.spire.xls.Worksheet; public static void transExcelToImg(String excelPath, String imgPath){//加载Excel工作表Workbook wb new Workbook();wb.loadFromFile(excelPath);//获取工作表Worksheet sheet wb.getWorksheets().get(…

ChatGPT:为什么说 NoSQL 数据库天生支持分布式,数据冗余和数据分片等特性?

ChatGPT:为什么说 NoSQL 数据库天生支持分布式,数据冗余和数据分片等特性? NoSQL 数据库天生支持分布式、数据冗余和数据分片等特性,旨在提供可扩展的高可用高性能数据存储解决方案,有以下几个原因: 1. 分…