前言
这个点是因为在听音乐总是遇到那个会员制度的影响,所以就想自己弄一个这样的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来设计全局变量的效果是一样。
如果你觉得这篇文章对你有所启发的话,期待你的点赞、收藏和打赏,对我创作的支持!!!