用Python制作你的专属音乐播放器(此刻浪漫只属于你哦*´▽`*)

news2024/11/17 0:20:15

文章目录

  • 前言
  • 一、项目介绍
  • 二、环境配置
  • 三、代码实战


前言

昨天是博主的一位朋友生日,除了送上大大的红包,知道他喜欢听音乐,特意用代码给他写了一个 专属音乐播放器,今天把这个代码也开源送给所有粉丝哦。

在这里插入图片描述


一、项目介绍

我们常用的音乐播放器,比如酷狗,QQ音乐等里面的页面款式都是官方设定好的,使用者无法根据自己的需求更改,但是博主用代码写的这个 专属音乐播放器 则不同,作为普通用户的话,可以按照自己天马行空的想象力更改页面布局,背景颜色,包括播放器的名字都可以任意命名。

当然最关键的是 此款播放器所占内存非常非常小,仅有1.9KB,任何配置的电脑都可以运行,相较于那些动辄几十、上百兆大小的播放器而言,是不是嗨到起飞呢ヾ(✿゚▽゚)ノ。

在这里插入图片描述

我们先一睹为快,看看效果吧:


二、环境配置

在正式写代码之前,我们需要提前安装配置好如下工具:

  • 下载安装好Python解释器
  • 下载安装好Pycharm
  • 将Python解释器正确配置到Pycharm中
  • 需要额外安装好pygame这个三方库

第一,我们需要安装好Python是因为此项目是用Python语言编写的,如果还有不会下载安装的小伙伴,可以看博主之前的博客【百万程序员第一步,学会Python安装(超详细哦)】。

第二,需要安装好Pycharm是因为这是一个非常好用的写代码神器,我们所有的Python代码都会在这个编辑器上编写,如果还有不会下载安装的小伙伴,也可以看博主之前的博客【Pycharm安装配置详细教程】。

第三,需要将安装好的Python配置到Pycharm中是因为Pycharm只可以写代码,但是无法把代码翻译成电脑能理解执行的二进制机器码,所以需要将Python解释器配置上去,这样所有代码写好之后均可被解释执行,至于配置的详细步骤,还有不懂的小伙伴可以参考第二条里面提到的博客,在此就不做重复赘述。

第四,我们需要额外安装pygame这个三方库是因为稍后代码中需要用到这个库,之所以叫三方库,顾名思义,就是第三方来源的库,也就是Python安装好之后本身是没有这个库的,需要我们额外安装一下,具体安装方式如下:

  1. 同时按下键盘的 Win + R 键打开运行框,Win键就是Windows图标键

  2. 在运行框中输入 cmd 这三个字母,然后点击确定,进入黑色控制台

  3. 在控制台里面输入如下命令,如果担心输错,可以直接复制下面命令
    pip install pygame -i https://mirrors.aliyun.com/pypi/simple/

  4. 输入完成后,按下回车键(也就是Enter键),等待安装完成即可,安装成功的字样如下图红框所示
    在这里插入图片描述


三、代码实战

代码实战中有几个部分跟大家先单独介绍一下。

首先是我们需要引入的全部库,如下:

import os
import pygame
import tkinter as t
from tkinter.filedialog import askdirectory

其中, os 库是Python自带的操作系统库,不用额外安装,作用是处理电脑中的文件及文件夹,比如创建、删除、查询等等,因为我们的播放器如果要播放本地歌曲,就要打开本地文件夹读取所有歌曲目录,这里就需要用到 os 库;

pygame 库是第三方游戏库,这个库的作用主要是用于游戏开发中所有场景,比如动作,声音,图像等等。在此项目中的作用是加载和播放声音,因为我们读取到歌曲之后要进行播放、暂停等操作,所以就需要用到 pygame 库,当然这个库需要额外安装,上面我们已经提到了。

tkinter 库是Python自带的视窗设计库,不用额外安装,作用是设计图形界面窗口,比如我们打开任何软件都有窗口外观,那这些外观元素都可以进行设计。在项目中因为我们要自己设计播放器窗口的名字,里面的分区大小,颜色等等,所以需要用到 tkinter 库。

其次是播放器窗口大小和位置设计,代码如下:

screenWidth = music_player.winfo_screenwidth()
screenHeight = music_player.winfo_screenheight()
width = 700
height = 700
left = (screenWidth - width) / 2
top = (screenHeight - height) / 2
music_player.geometry("%dx%d+%d+%d" % (width, height, left, top))

如果有小伙伴想自己更改播放器窗口大小和位置,可以更改上面代码中的数字参数哦。

再就是播放器里面控件的样式布局,代码如下:

Button1 = t.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="播放", command=play, bg="SeaGreen1", fg="white")
Button2 = t.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="停止", command=stop, bg="red", fg="white")
Button3 = t.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="暂停", command=pause, bg="Orchid1", fg="white")
Button4 = t.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="取消暂停", command=unpause, bg="Yellow4", fg="white")

如果大家想按照自己喜好更换控件的样式,就需要更改上面代码括号里面的参数。

最后,附上全部代码如下

import os
import pygame
import tkinter as t
from tkinter.filedialog import askdirectory

music_player = t.Tk()
music_player.title("小十一的专属音乐播放器")
screenWidth = music_player.winfo_screenwidth()
screenHeight = music_player.winfo_screenheight()
width = 700
height = 700
left = (screenWidth - width) / 2
top = (screenHeight - height) / 2
music_player.geometry("%dx%d+%d+%d" % (width, height, left, top))
directory = askdirectory()
os.chdir(directory)
song_list = os.listdir()
play_list = t.Listbox(music_player, font="Helvetica 12 bold", bg='SkyBlue1', selectmode=t.SINGLE)
for item in song_list:
    pos = 0
    play_list.insert(pos, item)
    pos += 1
pygame.init()
pygame.mixer.init()


# 播放
def play():
    pygame.mixer.music.load(play_list.get(t.ACTIVE))
    var.set(play_list.get(t.ACTIVE))
    pygame.mixer.music.play()


# 停止
def stop():
    pygame.mixer.music.stop()


# 暂停
def pause():
    pygame.mixer.music.pause()


# 取消暂停
def unpause():
    pygame.mixer.music.unpause()


Button1 = t.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="播放", command=play, bg="SeaGreen1", fg="white")
Button2 = t.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="停止", command=stop, bg="red", fg="white")
Button3 = t.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="暂停", command=pause, bg="Orchid1", fg="white")
Button4 = t.Button(music_player, width=5, height=3, font="Helvetica 12 bold", text="取消暂停", command=unpause, bg="Yellow4", fg="white")
var = t.StringVar()
song_title = t.Label(music_player, font="Helvetica 12 bold", textvariable=var)
song_title.pack()
Button1.pack(fill="x")
Button2.pack(fill="x")
Button3.pack(fill="x")
Button4.pack(fill="x")
play_list.pack(fill="both", expand="yes")
music_player.mainloop()

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

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

相关文章

Vue--》实现动画与过渡效果

目录 动画效果 过渡效果 第三方动画库 Vue封装的过渡与动画作用是在插入、更新或移除DOM元素时,在合适的时候给元素添加类名。 动画效果 操作css的trasition或animation,vue会给目标元素添加/移除特定的class,过渡的相关类名是&#xff1…

Spring项目中用了这种解耦模式,经理对我刮目相看

前言 不知道大家在项目中有没有遇到过这样的场景,根据传入的类型,调用接口不同的实现类或者说服务,比如根据文件的类型使用 CSV解析器或者JSON解析器,在调用的客户端一般都是用if else去做判断,比如类型等于JSON&…

【Spring6源码・IOC】Bean的实例化

上一节我们讲到《【Spring6源码・IOC】BeanDefinition的加载》,这一节我们来讲解一下Bean的实例化。 根据xml或注解加载完Bean的信息后,最终会通过反射来创建bean的对象。 invokeBeanFactoryPostProcessors()主要是加载BeanDefinition。 finishBeanFa…

MAC(m1)-VMWare Fusion安装CentOS7.9(续)

下载了CentOS8,优先安装CentOS8 默认的配置有点小, 可以根据自己需求进行自定义设置: 点击存储,会出现: 咱们是中国人,优先选择中文: 点击网络和主机名,配置网络: 打开网卡开关&…

找出给定数组中和是给定目标整数的两个整数,输出找到的两个整数下标

找出给定数组中和是给定目标整数的两个整数,输出找到的两个整数下标。 (本文获得CSDN质量评分【x】)【学习的细节是欢悦的历程】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅…

Android---简易Snackbar

目录 Snackbar 简介 Snackbar 特性 完整Demo Snackbar 简介 Snackbar 是 Android5.0 新特性---Material Design 中的一个控件,用来代替 Toast。Snackbar 就是一个类似 Toast 的快速弹出消息提示的控件,手机上显示在底部,大屏幕设备显示在左…

Golang实现分布式锁

1. go实现分布式锁 通过 golang 实现一个简单的分布式锁,包括锁续约、重试机制、singleflght机制的使用 1.1 redis_lock.go package redis_lockimport ("context"_ "embed""errors""github.com/go-redis/redis/v9""…

Java Netty框架自建DNS代理服务器教程

前言 DNS协议作为着互联网客户端-服务器通信模式得第一关,在当下每天都有成千上亿上网记录产生得当今社会,其重要性自然不可言喻。在国内比较有名得DNS服务器有电信得114.114.114.114、阿里云得223.5.5.5,DNSPod得119.29.29.29,配…

【矩阵论】8. 常用矩阵总结——镜面阵,正定阵

8.4 镜面阵 法向量确定一个镜面 8.4.1 镜面阵的作用 对法向量 Aα−αA\alpha-\alphaAα−αA(Aα)A2ααA(A\alpha)A^2\alpha\alphaA(Aα)A2αα 对镜面上向量 AYYAYYAYY 8.4.2 镜面阵表示 AIn−2ααH∣α∣2,其中α(x1x2⋮xn)∈Cn,且α≠0AI_n-\frac{2\alpha\alpha^H}{\…

【实际开发02】- 同模块 - 单表 CRUD 代码 - 批量操作

目录 0. yml 配置 1. 账号 / 密码 等有概率变更的信息 推荐 动态配置 , 避免写死 1. entity 处理 ( 减少后续 insert/update 判空处理 ) 1. volidation.annotation 配合 Valid - 参数校验 2. Validated - ( 相较于 valid 更加严谨的校验 ) 1. Save / Status 2. Update /…

vue中使用axios

一、axios axios是一个基于Promise的网络请求库。既可以在node.js(服务器端)使用,也可以在浏览器端使用 1. 在node.js中使用的原生的http模块 2. 在浏览器中使用的XMLHttpRequest 二、vue中的使用方法 1. 安装:npm install axios…

二分查找及其扩展

目录 二分查找算法思想: 循环 递归 有多个与key相等数据的查询,找最左边与关键字相等的那个 找第一个大于key的元素的下标 有序循环数组的二分查找 二分查找算法思想: 二分查找也叫折半查找,查找效率较高。但是查找的线性表…

振弦采集模块电子标签测量(智能振弦传感器)

振弦采集模块电子标签测量(智能振弦传感器) 此功能在 SF3.52 版本时增加。 固件版本 V3.52 修改固件版本号为 V3.52_2201009。 增加了电子标签测量功能。 WKMOD.[12]用于控制是否使用此功能 新增状态位 STATUS.[13],用来表示是否检测到了电子…

JAVA开发运维(DevOps过程)

DevOps开发运维的一套方法论。这边文章主要借鉴万达的DevOps的建设过程。谈谈DevOps主要解决那些问题和怎么解决。DevOps的是一种IT项目开发管理方法论,它旨在提供全面的持续集成、持续交付等能力,并持在续进行过程度量和改进,不断提升 IT 运…

新电脑安装vmware和centos8系统

1.安装vmware 1.1.vmware官网下载 需要付费 1.2.使用指定破解版本 链接:https://pan.baidu.com/s/1YEeaDyKAQk_3t6ITw2aaTQ 提取码:fjyf vmware16最新许可证密钥: ZF3R0-FHED2-M80TY-8QYGC-NPKYF YF390-0HF8P-M81RQ-2DXQE-M2UT6 ZF71R-DMX…

HTML实现网站欢迎页过渡

演示 一秒后直达主界面 css html, body {background: radial-gradient(#181818, #000000);margin: 0;padding: 0;border: 0;-ms-overflow-style: none;}::-webkit-scrollbar {width: 0.5em;height: 0.5em;background-color: #c7c7c7;}/*定义滚动条轨道 内阴影圆角*/::-webkit…

c++11 标准模板(STL)(std::forward_list)(二)

定义于头文件 <forward_list> template< class T, class Allocator std::allocator<T> > class forward_list;(1)(C11 起)namespace pmr { template <class T> using forward_list std::forward_list<T, std::pmr::polymorphic_…

什么是数字孪生城市

数字孪生城市理念自提出以来不断升温&#xff0c;已成为新型智慧城市建设的热点&#xff0c;受到政府和产业 界的高度关注和认同。 什么是数字孪生城市 北京智汇云舟科技有限公司成立于2012年&#xff0c;专注于创新性的“视频孪生&#xff08;实时实景数字孪生&#xff09;”…

【Java编程进阶】Java抽象类与接口详解

推荐学习专栏&#xff1a;Java 编程进阶之路【从入门到精通】&#xff0c;从入门到就业精通&#xff0c;买不了吃亏&#xff0c;买不了上当&#xff01;&#xff01; 文章目录1. 抽象类2.接口3. 抽象类和接口对比4. 总结Java基础教程系列文章1. 抽象类 前面说到&#xff0c;Ja…

【营销获客三】信贷细分客群研究——小微企业主

【营销获客三】信贷细分客群研究——小微企业主一、小微企业主客群综述1.1 小微企业主定义与体量1.2 小微企业主信贷需求规模1.3 小微企业主的发展历史1.4 小微企业主不同阶段的痛点问题二、小微企业主整体客群特征2.1 客群特征概述2.2 基本属性特征2.3 经营情况特征2.4 融资借…