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 непосредственно

Другие вопросы по тегам