Tkinter застрял в GUI во время воспроизведения mp3 файла
Я полный новичок в Python и в настоящее время создаю графический интерфейс с Tkinter, который может воспроизводить mp3-файлы. только для практики.
Я использую Mac, и появляется радужное колесо, которое появляется, когда программа отстает, когда я нажимаю кнопку воспроизведения, которую я сделал. И это не позволяет мне нажимать какие-либо кнопки во время воспроизведения mp3-файла.
Кто-нибудь может помочь мне разобраться, пожалуйста?
from pydub import AudioSegment
from pydub.playback import play
from tkinter import *
class MP3:
def __init__(self, master):
frame = Frame(master)
frame.pack()
self.go_back_button = Button(frame, text = '<<')
self.go_back_button.grid(row = 0 , column = 0)
self.play_button = Button(frame, text = '|>', command = self.play_song)
self.play_button.grid(row = 0 , column = 1)
self.pause_button = Button(frame, text = '||', command = self.pause_song)
self.pause_button.grid(row = 0 , column = 2)
self.go_forward_button = Button(frame, text = '>>')
self.go_forward_button.grid(row = 0 , column = 3)
self.shuffle_button = Button(frame, text = 'SHUFFLE')
self.shuffle_button.grid(row = 0 , column = 4)
self.is_paused = False
self.song_list = ['songs.mp3']
self.i = 0
def play_song(self):
while self.is_paused is False:
song = AudioSegment.from_mp3("/Users/bang/Desktop/music/{}".format(self.song_list[self.i]))
play(song)
def pause_song(self):
self.is_paused = True
root = Tk()
myMp3 = MP3(root)
root.mainloop()
1 ответ
Я рекомендую использовать simpleaudio (например, pip install simpleaudio
) как предложено в readme pydub
Если вы используете pydub.playback.play()
он все еще будет ждать окончания воспроизведения, но pydub.playback._play_with_simpleaudio()
будет работать в потоке, а не блокировать интерпретатор.
Вы, вероятно, захотите использовать _play_with_simpleaudio()
функция в качестве отправной точки для вашей собственной функции воспроизведения, которая использует simpleaudio
непосредственно