0

我正在使用 Tkinter 在 python 2.6 中制作音乐播放器。这是我的代码:

from Tkinter import *
import mp3play
import tkFileDialog
import Tkinter
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 Exit():
  exit()
root = Tk()
root.title("EmoPlayer")
root.geometry('300x100+250+100')
filename = Tkinter.StringVar()
name = Tkinter.StringVar()
play_list = Tkinter.StringVar()
menubar = Menu(root)
filemenu = Menu(menubar, tearoff=0)
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 = 'Open file', command = open_file)
open_file.grid(row=0, column=3)
play_button = Button(root, width = 5, height = 1, text='Play', command = play)
play_button.grid(row=0, column=0, sticky = W)
stop_button = Button(root, width = 5, height = 1, text='Stop', command = stop)
stop_button.grid(row=0, column=1, sticky = W)
pause_button = Button(root, width = 5, height = 1, text='Pause', command = pause)
pause_button.grid(row=0, column=2)
volume_slider = Scale(root, label='Volume', orient = 'horizontal', fg = 'black', command = vol)
volume_slider.grid(row=0, column=4)
file_name_label = Label(root, font=('Verdana', 8), fg = 'black', wraplength = 300, textvariable=name )
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, width = 50)   
play_list_display.pack()

play_list_window.mainloop()
root.mainloop()

此代码可以打开一个 mp3 文件,将其插入播放列表并播放。但它不能允许通过从播放列表中选择来播放歌曲。谁能告诉我如何通过从播放列表中进行选择来使事情正常进行?

4

1 回答 1

1

您可以订阅列表框的选择更改 ( "<<ListboxSelect>>") 或双击事件 ( "<Double-Button-1>")。

请注意,您必须将 mp3 文件的完整路径存储在某处(播放列表中显示的文件名不足以播放它)。

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

play_list_display.bind("<Double-Button-1>", tune_changed)
play_list_display.bind("<<ListboxSelect>>", tune_changed)
于 2012-05-08T13:43:48.160 回答