Tkinter在播放mp3文件时卡在GUI中

时间:2018-11-08 13:59:06

标签: python tkinter mp3 pydub

我是使用Python的完整入门者,目前正在使用Tkinter制作可以播放mp3文件的GUI。只是为了练习。

我使用的是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 :(得分:0)

我建议使用pydub readme中建议的简单音频(例如pip install simpleaudio

如果使用pydub.playback.play(),它将仍然等待播放完成,但是pydub.playback._play_with_simpleaudio()将在线程中运行,并且不会阻塞解释器。

您可能希望使用_play_with_simpleaudio()函数作为自己的播放功能的起点,而该功能直接使用simpleaudio