编程语言
首页 > 编程语言> > 开源项目——简易界面音乐播放器(基于python3的pygame库和tkinter库)

开源项目——简易界面音乐播放器(基于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。 

标签:index,tkinter,mixer,pygame,root,realnames,python3
来源: https://blog.csdn.net/txr152111/article/details/119215824