【13】本地音乐播放器 python实现

前言

这个点是因为在听音乐总是遇到那个会员制度的影响,所以就想自己弄一个这样的ui,练习一下代码,也给自己弄个ui玩玩,其实还有很多的更高级和更好的免费的音乐播放器网页和工具,我完全比不了的。

ui界面展示

在这里插入图片描述

源码

import pygame
import tkinter as tk
import random
import time
import os

pygame.mixer.init()

def music_path():
    dir_list = os.listdir(r'C:\music')
#     print('dir_list',dir_list)
    file_path = []
    for i in range(len(dir_list)-1):
        file_path.append(r'C:\music/' + dir_list[i])
#     print('file',file_path)
    return file_path,dir_list

def skip_music():
    i = random.randint(0, len(file_path)-1)
    music_name = file_path[i]
    pygame.mixer.music.load(music_name)
    pygame.mixer.music.play()

def play_music():
    n = int(e.get())
    music_name = file_path[n-1]
    pygame.mixer.music.load(music_name)
    pygame.mixer.music.play()
    
def pause_music():
#     print("暂停播放\n")
    pygame.mixer.music.pause()
def unpause_music():
#     print("继续播放\n")
    pygame.mixer.music.unpause()
def stop_music():
#     print("停止播放\n")
    pygame.mixer.music.stop()

file_path,dir_list = music_path()

window = tk.Tk()
window.title('音乐播放器')
window.geometry('500x500')

for i in range(len(dir_list)-1):
    texts = str(i+1)+ ". " + dir_list[i]
    l1 = tk.Label(window,text=texts,fg='Orange',font=('草书 13') )
    l1.grid(column=2,row= i,padx=24,pady=12)

b = tk.Button(window,text='暂停播放',bg='LemonChiffon',fg='Chocolate',font=('草书 13'),width=8,height=0,command=pause_music)
b.grid(column=0,row=3,padx=24,pady=12)
b1 = tk.Button(window,text='继续播放',bg='LemonChiffon',fg='Chocolate',font=('草书 13'),width=8,height=0,command=unpause_music)
b1.grid(column=0,row=4,padx=24,pady=12)
b2 = tk.Button(window,text='停止播放',bg='LemonChiffon',fg='Chocolate',font=('草书 13'),width=8,height=0,command=stop_music)
b2.grid(column=0,row=5,padx=24,pady=12)
b3 = tk.Button(window,text='切歌',bg='LemonChiffon',fg='Chocolate',font=('草书 13'),width=8,height=0,command=skip_music)
b3.grid(column=0,row=6,padx=24,pady=12)

var = tk.StringVar()
e = tk.Entry(window,textvariable=var,bg='LemonChiffon',fg='black',width=13)
e.grid(column=0,row=1,padx=24,pady=12)

b4 = tk.Button(window,text='点歌',bg='LemonChiffon',fg='Chocolate',font=('草书 13'),width=8,height=0,command=play_music)
b4.grid(column=0,row=2,padx=24,pady=12)



window.mainloop()

# pygame.mixer.stop()

代码解析

  • 导入模块部分
import pygame
import tkinter as tk
import random
import time
import os
  • tkinter设计ui
window = tk.Tk()
window.title('音乐播放器')
window.geometry('500x500')
  • Label标签展示歌曲名
for i in range(len(dir_list)-1):
    texts = str(i+1)+ ". " + dir_list[i]
    l1 = tk.Label(window,text=texts,fg='Orange',font=('草书 13') )
    l1.grid(column=2,row= i,padx=24,pady=12)
  • 多个按钮设计

包括暂停播放、继续播放、停止播放、切歌以及点歌的按钮设计,其中在点歌上方设计了一个输入框,根据右方的歌曲编号进行点歌。

b = tk.Button(window,text='暂停播放',bg='LemonChiffon',fg='Chocolate',font=('草书 13'),width=8,height=0,command=pause_music)
b.grid(column=0,row=3,padx=24,pady=12)
b1 = tk.Button(window,text='继续播放',bg='LemonChiffon',fg='Chocolate',font=('草书 13'),width=8,height=0,command=unpause_music)
b1.grid(column=0,row=4,padx=24,pady=12)
b2 = tk.Button(window,text='停止播放',bg='LemonChiffon',fg='Chocolate',font=('草书 13'),width=8,height=0,command=stop_music)
b2.grid(column=0,row=5,padx=24,pady=12)
b3 = tk.Button(window,text='切歌',bg='LemonChiffon',fg='Chocolate',font=('草书 13'),width=8,height=0,command=skip_music)
b3.grid(column=0,row=6,padx=24,pady=12)

var = tk.StringVar()
e = tk.Entry(window,textvariable=var,bg='LemonChiffon',fg='black',width=13)
e.grid(column=0,row=1,padx=24,pady=12)

b4 = tk.Button(window,text='点歌',bg='LemonChiffon',fg='Chocolate',font=('草书 13'),width=8,height=0,command=play_music)
b4.grid(column=0,row=2,padx=24,pady=12)
  • 按钮关联的函数设计

通过按钮的command参数进行函数关联,对其功能进行实现。
其中有一个非常好用的模块,就是pygame模块。

def skip_music():
    i = random.randint(0, len(file_path)-1)
    music_name = file_path[i]
    pygame.mixer.music.load(music_name)
    pygame.mixer.music.play()

def play_music():
    n = int(e.get())
    music_name = file_path[n-1]
    pygame.mixer.music.load(music_name)
    pygame.mixer.music.play()
    
def pause_music():
#     print("暂停播放\n")
    pygame.mixer.music.pause()
def unpause_music():
#     print("继续播放\n")
    pygame.mixer.music.unpause()
def stop_music():
#     print("停止播放\n")
    pygame.mixer.music.stop()
  • 加载本地音乐文件夹

这里我们对文件夹的路径是定死的,是绝对路径,可以自行修改。
dir_list 是获取文件夹下所有的文件名;而file_path 是在文件名的基础上,在前面加上了路径就能够完整地访问这个音乐文件并进行播放了。

tips: 如果想了解一些不确定的变量,就可以把他们打印出来,会非常直观。

def music_path():
    dir_list = os.listdir(r'C:\music')
#     print('dir_list',dir_list)
    file_path = []
    for i in range(len(dir_list)-1):
        file_path.append(r'C:\music/' + dir_list[i])
#     print('file',file_path)
    return file_path,dir_list
  • 全局变量
file_path,dir_list = music_path()

因为不少的地方需要访问这两个变量就把他们在全局部分进行返回值了。这个方式和通过global来设计全局变量的效果是一样。

如果你觉得这篇文章对你有所启发的话,期待你的点赞、收藏和打赏,对我创作的支持!!!

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_x_w

你的肯定是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值