2017-01-26 30 views
0

我是新來的python,我試圖建立一個音樂播放器,可以將所有mp3歌曲添加到該文件夾​​中的列表中。更改隊列中的歌曲Python,Pygame,Mutagen,Tkinter

我可以看到列表中的所有歌曲,但是當我點擊下一個按鈕時,它只會播放下一首歌曲和前一首歌曲。如果我再次點擊下一首,它會再次播放同一首歌曲。無論如何,我可以修復我的代碼

我認爲方法有問題,nextsong,prevsong。請幫助我已經嘗試了很多,但無法找到錯誤的地方

import os 


import pygame 
from tkinter.filedialog import Tk, Button, askdirectory, Label, Listbox, LEFT, RIGHT 

from mutagen.id3 import ID3 


root = Tk() 


listofsongs=[] 
formattedlist = [] 
realnames = [] 

index =0 


def directorychoose(): 
    filename = askdirectory() 
    os.chdir(filename) 

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



    for file in realnames: 
     formattedlist.append(file+"\n") 

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


def nextsong(event): 
    pygame.mixer.music.load(listofsongs[index+1]) 
    pygame.mixer.music.play() 

def prevsong(event): 
    pygame.mixer.music.load(listofsongs[index-1]) 
    pygame.mixer.music.play() 

def stopsong(event): 
    pygame.mixer.music.stop() 

directorychoose() 

label = Label(root,text='Music player') 
label.pack() 

listbox = Listbox(root) 

listbox.pack() 
for item in formattedlist: 
    listbox.insert(0,item) 

button = Button(root,text='Next') 
button.pack(side=LEFT) 
button2 = Button(root,text='Prev') 
button2.pack(side=RIGHT) 
stopbutton = Button(root,text='Stop') 
stopbutton.pack() 

button.bind("<Button-1>",nextsong) 
button2.bind("<Button-1>",prevsong) 
stopbutton.bind("<Button-1>",stopsong) 


root.mainloop() 

回答

1

問題是,您從未將更改分配給索引,因此它永遠不會更改。此外,由於函數中的變量在其中創建和銷燬,因此必須將其作爲全局變量放置。

你這樣做:

x+1 

你應該將其更改爲:

x= x+1 

完整代碼:

import os 


import pygame 
from tkinter.filedialog import Tk, Button, askdirectory, Label, Listbox, LEFT, RIGHT 

from mutagen.id3 import ID3 

root = Tk() 

listofsongs = [] 
formattedlist = [] 
realnames = [] 

index = 0 

def directorychoose(): 
    filename = askdirectory() 
    os.chdir(filename) 

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

    for file in realnames: 
     formattedlist.append(file + "\n") 

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


def nextsong(event): 
    global index 
    index += 1 
    pygame.mixer.music.load(listofsongs[index]) 
    pygame.mixer.music.play() 


def prevsong(event): 
    global index 
    index -= 1 
    pygame.mixer.music.load(listofsongs[index]) 
    pygame.mixer.music.play() 


def stopsong(event): 
    pygame.mixer.music.stop() 


directorychoose() 

label = Label(root, text='Music player') 
label.pack() 

listbox = Listbox(root) 

listbox.pack() 
for item in formattedlist: 
    listbox.insert(0, item) 

button = Button(root, text='Next') 
button.pack(side=LEFT) 
button2 = Button(root, text='Prev') 
button2.pack(side=RIGHT) 
stopbutton = Button(root, text='Stop') 
stopbutton.pack() 

button.bind("<Button-1>", nextsong) 
button2.bind("<Button-1>", prevsong) 
stopbutton.bind("<Button-1>", stopsong) 

root.mainloop() 
+0

非常感謝您eyllanesc。它現在有效。 –