【问题标题】:Tkinter stuck in GUI while playing mp3 fileTkinter 在播放 mp3 文件时卡在 GUI 中
【发布时间】:2018-11-08 13:59:05
【问题描述】:

我是 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()

【问题讨论】:

  • 我无法提供详细的答案,但我建议使用线程。您可以创建一个播放音频的新线程。
  • 我同意斯科蒂的观点。您将需要使用线程来管理音频,以免中断 tkinter 中的主循环。
  • 我想你的程序 'freezes' 因为你不只是尝试播放文件一次,而是你实际上尽可能快地循环并调用play(song) 多次。
  • @AdamMitchell 这也是另一个问题。 OP 将需要更正两者。
  • 感谢你们的 cmets。我对线程不太熟悉,想了解更多关于它们以及如何使用它们的信息。有没有好的资源或方法可以了解更多关于线程的信息?

标签: python tkinter mp3 pydub


【解决方案1】:

我建议像pydub readme 中建议的那样使用simpleaudio(例如pip install simpleaudio

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

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

【讨论】:

  • 播放时无法关闭修补程序窗口。有什么建议吗?
  • 另外 _play_with_simpleaudio() 需要一个参数。我放了 AudioSegment 歌曲。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多