2017-01-26 19 views
0

Я новичок в python, и я пытаюсь создать музыкальный плеер, который может добавить все mp3-песни в свой список в этой папке.Изменение mp3 песен в очереди Python, Pygame, Mutagen, Tkinter

Я вижу все песни в списке, но когда я нажимаю следующую кнопку, она идет только одна песня следующая и одна предыдущая. если я снова нажму, он снова воспроизведет ту же песню. Есть ли в любом случае я могу исправить свой код

Я ДУМАЮ, что в методах, рядом с предыдущим, что-то не так. Пожалуйста, помогите я попробовал много, но не мог найти, где ошибка была

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. Он работает сейчас. –

 Смежные вопросы

  • Нет связанных вопросов^_^