Python 音乐播放器播放列表

Python 音乐播放器播放列表,python,tkinter,python-2.6,playlist,audio-player,Python,Tkinter,Python 2.6,Playlist,Audio Player,我制作了一个带有播放列表的音乐播放器,但播放列表中的歌曲不可播放,因为只有歌曲的名称出现在播放列表中,而不是完整的mp3文件。你能告诉我如何处理这个问题吗?? 这是我的密码: from Tkinter import * import mp3play import tkFileDialog import Tkinter import tkFont import Tkinter as tk #from PIL import ImageTk,Image def open_file():

我制作了一个带有播放列表的音乐播放器,但播放列表中的歌曲不可播放,因为只有歌曲的名称出现在播放列表中,而不是完整的mp3文件。你能告诉我如何处理这个问题吗?? 这是我的密码:

from Tkinter import *
import mp3play
import tkFileDialog
import Tkinter
import tkFont
import Tkinter as tk
#from PIL import ImageTk,Image

def open_file():                                #Opens a dialog box to open .mp3 file
    global music                                #then sends filename to file_name_label.
    global mp3
    global play_list
    filename.set (tkFileDialog.askopenfilename(defaultextension = ".mp3", filetypes=[("All Types", ".*"), ("MP3", ".mp3")]))
    playlist = filename.get()
    playlist_pieces = playlist.split("/")
    play_list.set (playlist_pieces[-1])
    playl = play_list.get()
    play_list_display.insert(END, playl)
    mp3 = filename.get()
    print mp3
    music = mp3play.load(mp3)
    pieces = mp3.split("/")
    name.set (pieces[-1])

def play():                                     #Plays the .mp3 file
    music.play()

def stop():                                     #Stops the .mp3 file
    music.stop()                

def pause():                                    #Pauses or unpauses the .mp3 file
    if music.ispaused() == True:
        music.unpause()
    elif music.ispaused() == False:
        music.pause()

def vol(event):                                 #Allows volume to be changed with the slider
    v = Scale.get(volume_slider)
    music.volume(v)

def tune_changed(event):
    idx = event.widget.curselection()[0]
    print ("Now playing %s" % event.widget.get(idx))

def Exit():
    exit()

root = tk.Tk()
root.title("EmoPlayer")

root.configure(background='black')

#root = Tk()

root.geometry('300x100+750+300')

filename = Tkinter.StringVar()
name = Tkinter.StringVar()
play_list = Tkinter.StringVar()
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0, bg="black", fg="Orange")
menubar.add_cascade(label='File', menu = filemenu)
filemenu.add_command(label='Open', command = open_file)
filemenu.add_separator()
filemenu.add_command(label='Exit', command = Exit)
root.config(menu=menubar)
open_file = Button(root, width = 6, height = 1, text = 'Mood',fg='Orange', bg='black')
open_file.grid(row=0, column=3)
play_button = Button(root, width = 5, height = 1, text='Play', fg='Orange', command = play, bg="black")
play_button.grid(row=0, column=0, sticky = W)
stop_button = Button(root, width = 5, height = 1, text='Stop',fg='Orange', command = stop, bg="black")
stop_button.grid(row=0, column=1, sticky = W)
pause_button = Button(root, width = 5, height = 1, text='Pause',fg='Orange', command = pause, bg="black")
pause_button.grid(row=0, column=2)
volume_slider = Scale(root, label='Volume', orient = 'horizontal', fg = 'Orange', command = vol, bg="black")
volume_slider.grid(row=0, column=4)
file_name_label = Label(root, font=('Comic Sans', 8), fg = 'Orange', wraplength = 300, textvariable=name, bg="black" )
file_name_label.grid(row=3, column=0, columnspan=8)

play_list_window = Toplevel(root, height = 150, width = 100)
play_list_window.title("Playlist")
play_list_display = Listbox(play_list_window, selectmode=EXTENDED, width = 50, bg="Dark Slate grey", fg="Orange")
play_list_display.bind("<Double-Button-1>", tune_changed)

play_list_display.pack()

play_list_window.mainloop()



root.mainloop()
从Tkinter导入*
导入mp3play
导入tkFileDialog
进口Tkinter
导入tkFont
将Tkinter作为tk导入
#从PIL导入ImageTk,图像
def open_file():#打开一个对话框以打开.mp3文件
全局音乐#然后将文件名发送到文件名标签。
全球mp3
全球播放列表
filename.set(tkFileDialog.askopenfilename(defaultextension=“.mp3”,filetypes=[(“所有类型”、“*”),(“mp3”、“.mp3”)]))
playlist=filename.get()
playlist\u片段=playlist.split(“/”)
play_list.set(播放列表\u片段[-1])
playl=play_list.get()
播放列表显示。插入(结束,播放)
mp3=filename.get()
打印mp3
音乐=mp3播放加载(mp3)
片段=mp3.分割(“/”)
name.set(件[-1])
def play():#播放.mp3文件
音乐播放
def stop():#停止.mp3文件
音乐,停止
def pause():#暂停或取消暂停.mp3文件
如果music.ispaused()==True:
音乐
elif music.ispaused()=假:
音乐暂停
def vol(事件):#允许使用滑块更改音量
v=缩放。获取(音量\滑块)
音乐卷(五)
def调谐_已更改(事件):
idx=event.widget.curselection()[0]
打印(“正在播放%s”%event.widget.get(idx))
def Exit():
退出()
root=tk.tk()
root.title(“EmoPlayer”)
root.configure(background='black')
#root=Tk()
根几何体('300x100+750+300')
filename=Tkinter.StringVar()
name=Tkinter.StringVar()
play_list=Tkinter.StringVar()
菜单栏=菜单(根)
filemenu=Menu(menubar,tearoff=0,bg=“黑色”,fg=“橙色”)
menubar.add_级联(label='File',menu=filemenu)
filemenu.add_命令(label='Open',command=Open_文件)
filemenu.add_separator()
filemenu.add_命令(label='Exit',command=Exit)
root.config(menu=menubar)
打开文件=按钮(根,宽=6,高=1,文本='Mood',fg='Orange',bg='black')
打开\u file.grid(行=0,列=3)
播放按钮=按钮(根,宽度=5,高度=1,text='play',fg='Orange',command=play,bg=“black”)
play_button.grid(行=0,列=0,粘性=W)
停止按钮=按钮(根,宽度=5,高度=1,文本='stop',fg='橙色',命令=stop,bg=“黑色”)
停止按钮网格(行=0,列=1,粘性=W)
pause_button=按钮(根,宽度=5,高度=1,text='pause',fg='Orange',command=pause,bg=“black”)
暂停按钮网格(行=0,列=2)
音量滑块=刻度(根,标签=音量,方向=水平,前景=橙色,命令=音量,背景=黑色)
体积滑块网格(行=0,列=4)
file_name_label=label(根,字体=('Comic Sans',8),fg='Orange',wraplength=300,textvariable=name,bg=“black”)
文件\u name\u label.grid(行=3,列=0,列span=8)
播放列表窗口=顶层(根,高度=150,宽度=100)
播放列表窗口标题(“播放列表”)
播放列表显示=列表框(播放列表窗口,选择模式=扩展,宽度=50,bg=“深灰色”,fg=“橙色”)
播放列表显示绑定(“,调谐已更改)
播放列表显示包()
播放列表窗口。mainloop()
root.mainloop()

我看过你的代码,因为我以前没有使用过mp3play,觉得它很有趣

以下是我所改变的:

  • 我将您的代码放在一个类中,这样在方法之间共享变量就更容易、更干净了。它还消除了乱搞
    全局
    的需要。通常会稍微清理代码,例如,拆分过长的行。我试着不在不必要的地方修改你的代码
  • 添加了一个保存实际文件路径的
    trackLocations
    列表
  • 添加了一行,双击播放列表即可加载新文件
  • 这就是结果,我希望它有助于:

    from Tkinter import *
    import mp3play
    import tkFileDialog
    import Tkinter
    import tkFont
    import Tkinter as tk
    
    class musicplay:
        def __init__(self):
            self.music = None
            self.play_list = []
            self.trackLocations = []
    
            self.root = tk.Tk()
            self.root.title("EmoPlayer")
    
            self.root.configure(background='black')
            self.root.geometry('300x100+750+300')
    
            self.filename = Tkinter.StringVar()
            self.name = Tkinter.StringVar()
            self.play_list = Tkinter.StringVar()
    
            menubar = Menu(self.root)
            filemenu = Menu(menubar, tearoff=0, bg="black", fg="Orange")
            menubar.add_cascade(label='File', menu = filemenu)
            filemenu.add_command(label='Open', command = self.open_file)
            filemenu.add_separator()
            filemenu.add_command(label='Exit', command = self.Exit)
            self.root.config(menu=menubar)
    
            open_file = Button(self.root, width = 6, height = 1,
                               text = 'Mood',fg='Orange', bg='black')
            open_file.grid(row=0, column=3)
    
            play_button = Button(self.root, width = 5, height = 1, text='Play',
                                 fg='Orange', command = self.play, bg="black")
            play_button.grid(row=0, column=0, sticky = W)
    
            stop_button = Button(self.root, width = 5, height = 1, text='Stop',
                                 fg='Orange', command = self.stop, bg="black")
            stop_button.grid(row=0, column=1, sticky = W)
    
            pause_button = Button(self.root, width = 5, height = 1, text='Pause',
                                  fg='Orange', command = self.pause, bg="black")
            pause_button.grid(row=0, column=2)
    
            self.volume_slider = Scale(self.root, label='Volume',
                                  orient = 'horizontal', fg = 'Orange', 
                                  command = self.vol, bg="black")
            self.volume_slider.grid(row=0, column=4)
    
            file_name_label = Label(self.root, font=('Comic Sans', 8),
                                    fg = 'Orange', wraplength = 300,
                                    textvariable=self.name, bg="black")
            file_name_label.grid(row=3, column=0, columnspan=8)
    
            play_list_window = Toplevel(self.root, height = 150, width = 100)
            play_list_window.title("Playlist")
            self.play_list_display = Listbox(play_list_window, selectmode=EXTENDED,
                                        width = 50, bg="Dark Slate grey",
                                        fg="Orange")
            self.play_list_display.bind("<Double-Button-1>", self.tune_changed)
            self.play_list_display.pack()
            play_list_window.mainloop()
    
            self.root.mainloop()        
    
        def open_file(self):                                
            """
            Opens a dialog box to open .mp3 filemusic,
            then sends filename to file_name_label.
            """
            self.filename.set(tkFileDialog.askopenfilename(
                defaultextension = ".mp3",
                filetypes=[("All Types", ".*"), ("MP3", ".mp3")]))
            self.playlist = self.filename.get()
            playlist_pieces = self.playlist.split("/")
            self.play_list.set (playlist_pieces[-1])
            playl = self.play_list.get()
            self.play_list_display.insert(END, playl)
            print self.filename.get()
            self.music = mp3play.load(self.filename.get())
            pieces = self.filename.get().split("/")
            self.trackLocations += [self.filename.get()]
            self.name.set(pieces[-1])
    
        def play(self):
            """Plays the .mp3 file"""
            self.music.play()
    
        def stop(self):
            """Stops the .mp3 file"""
            self.music.stop()                
    
        def pause(self):
            """Pauses or unpauses the .mp3 file"""
            if self.music.ispaused():
                self.music.unpause()
            else:
                self.music.pause()
    
        def vol(self, event):
            """Allows volume to be changed with the slider"""
            v = Scale.get(self.volume_slider)
            try:
                self.music.volume(v)
            except:
                pass
    
        def tune_changed(self, event):
            idx = event.widget.curselection()[0]
            self.music = mp3play.load(self.trackLocations[int(idx)])
            print ("Now playing %s" % event.widget.get(idx))
    
        def Exit(self):
            exit()
    
    if __name__ == "__main__":
        musicplay()
    
    从Tkinter导入*
    导入mp3play
    导入tkFileDialog
    进口Tkinter
    导入tkFont
    将Tkinter作为tk导入
    课堂音乐播放:
    定义初始化(自):
    self.music=无
    self.play_list=[]
    self.trackLocations=[]
    self.root=tk.tk()
    self.root.title(“EmoPlayer”)
    self.root.configure(background='black')
    自根几何体('300x100+750+300')
    self.filename=Tkinter.StringVar()
    self.name=Tkinter.StringVar()
    self.play_list=Tkinter.StringVar()
    菜单栏=菜单(self.root)
    filemenu=Menu(menubar,tearoff=0,bg=“黑色”,fg=“橙色”)
    menubar.add_级联(label='File',menu=filemenu)
    filemenu.add_命令(label='Open',command=self.Open_文件)
    filemenu.add_separator()
    filemenu.add_命令(label='Exit',command=self.Exit)
    self.root.config(menu=menubar)
    打开文件=按钮(self.root,宽度=6,高度=1,
    文本='情绪',前景='橙色',背景='黑色')
    打开\u file.grid(行=0,列=3)
    播放按钮=按钮(self.root,宽度=5,高度=1,text='play',
    fg='橙色',command=self.play,bg=“黑色”)
    play_button.grid(行=0,列=0,粘性=W)
    停止按钮=按钮(self.root,宽度=5,高度=1,text='stop',
    fg='Orange',command=self.stop,bg=“黑色”)
    停止按钮网格(行=0,列=1,粘性=W)
    pause_button=按钮(self.root,宽度=5,高度=1,text='pause',
    fg='Orange',command=self.pause,bg=“黑色”)
    暂停按钮网格(行=0,列=2)
    self.volume\u滑块=缩放(self.root,label='volume',
    方向='水平',前景='橙色',
    command=self.vol,bg=“黑色”)
    self.volume\u slider.grid(行=0,列=4)