Tkinter застрял в GUI во время воспроизведения mp3 файла - PullRequest
0 голосов
/ 08 ноября 2018

Я новичок в 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 Ответ

0 голосов
/ 08 ноября 2018

Я рекомендую использовать simpleaudio (например, pip install simpleaudio), как предложено в pydub readme

Если вы используете pydub.playback.play(), он все равно будет ждать завершения воспроизведения, но pydub.playback._play_with_simpleaudio() будет выполняться в потоке и не будет блокировать интерпретатор.

Возможно, вы захотите использовать функцию _play_with_simpleaudio() в качестве отправной точки для своих собственных функций воспроизведения, которые напрямую используют simpleaudio

...