开源项目——简易界面音乐播放器(基于python3的pygame库和tkinter库)

1.操作演示

运行程序,选择音乐所在的文件夹:

选择后即可播放音乐:

 

 2. 代码

import os
import pygame
import tkinter
import tkinter.filedialog
from mutagen.id3 import ID3

root = tkinter.Tk()
root.minsize(300, 300)

listofsongs = []
realnames = []
v = tkinter.StringVar()
songlabel = tkinter.Label(root, textvariable=v, width=35)
index = 0


def nextsong(event):
    global index
    if index < len(listofsongs) - 1:
        index += 1
    else:
        index = 0;
    pygame.mixer.music.load(listofsongs[index])
    pygame.mixer.music.play()
    updatelabel()

def previoussong(event):
    global index
    if index > 0 :
        index -= 1
    else:
        index = len(listofsongs) - 1
    pygame.mixer.music.load(listofsongs[index])
    pygame.mixer.music.play()
    updatelabel()

def stopsong(event):
    pygame.mixer.music.stop()
    v.set("")


def updatelabel():
    global index
    v.set(realnames[index])

def directorychooser():
    directory  = tkinter.filedialog.askdirectory()
    os.chdir(directory)

    for files in os.listdir(directory):
        if files.endswith('.mp3'):
            realdir = os.path.realpath(files)
            audio = ID3(realdir)
            realnames.append(audio['TIT2'].text[0])

            '''
            用四个字符标识一个帧,说明一个帧的内容含义,常用的对照如下:
            TIT2=标题表示内容为这首歌的标题,下同
            TPE1=作者
            TALB=专集
            TRCK=音轨格式:N/M 其中N 为专集中的第N 首,M为专集中共M 首,N和M 为ASCII 码表示的数字
            TYER=年代是用ASCII 码表示的数字
            TCON=类型直接用字符串表示
            COMM=备注格式:”eng\0备注内容”,其中eng 表示备注所使用的自然语言
            '''
            listofsongs.append(files)
            # print(files)

    pygame.mixer.init()
    pygame.mixer.music.load(listofsongs[0])
    pygame.mixer.music.play()


directorychooser()

label = tkinter.Label(root, text="一款简易的音乐播放器")
label.pack()

listbox = tkinter.Listbox(root)
listbox.pack()
# List of songs
realnames.reverse()
for item in realnames:
    listbox.insert(0, item)
realnames.reverse()

nextbutton = tkinter.Button(root, text='下一曲')
nextbutton.pack()

previousbutton = tkinter.Button(root, text="上一曲")
previousbutton.pack()

stopbutton = tkinter.Button(root, text="停止播放")
stopbutton.pack()


nextbutton.bind("<Button-1>", nextsong)
previousbutton.bind("<Button-1>", previoussong)
stopbutton.bind('<Button-1>', stopsong)

songlabel.pack()

root.mainloop()

3.注意

发生异常: KeyError 'TIT2'

keyerror一般是你使用字典里不存在的key产生的错误,在本项目中realnames.append(audio['TIT2'].text[0])  是一句容易出错的话。这是通过函数对音乐文件信息的识别。TIT2=标题、TPE1=作者、TALB=专集。

但是下载下来的音乐文件很多信息是残缺的。

所以在使用的时候需要注意下。

可以通过读取文件名来优化这个bug。 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

是刃小木啦~

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值