问题描述
这方面的新手。尝试创建一个输入 mp3 文件路径的 tkinter GUI,按下播放按钮开始播放,按下停止按钮停止播放。使用下面的代码,mp3 播放正常。然而,停止按钮完全没有反应,mp3 继续播放。任何有用的建议都将是 非常感谢。
import tkinter as tk
from pygame import mixer,time
class PlayMusic:
def __init__(self):
self.win=tk.Tk()
self.win.geometry('500x100+600+400')
self.win.title("Teo's Music Player")
myfont=('Arial',14,'bold')
self.lbl=tk.Label(self.win,text='Enter path',font=myfont)
self.lbl.grid(row=0,column=0)
self.ent=tk.Entry(self.win,width=25)
self.ent.grid(row=0,column=1)
self.b_start=tk.Button(self.win,text='Start >',command=self.start)
self.b_start.grid(row=1,column=0)
self.b_stop=tk.Button(self.win,text='Stop |',command=self.stop)
self.b_stop.grid(row=1,column=1)
self.win.mainloop()
def start(self):
path = str(self.ent.get())
mixer.init()
mixer.music.set_volume(0.2)
mixer.music.load(path)
mixer.music.play()
while mixer.music.get_busy():
time.Clock().tick(1)
def stop(self):
mixer.music.stop()
PlayMusic()
解决方法
只需从 while
方法中删除 stop
循环:
def start(self):
path = str(self.ent.get())
mixer.init()
mixer.music.set_volume(0.2)
mixer.music.load(path)
mixer.music.play()
# DELETE
# while mixer.music.get_busy():
# time.Clock().tick(1)
在播放音乐时此循环不会终止并阻止应用程序响应。
您只需要在原生 Pygame 应用程序中使用这样一个循环来防止应用程序立即退出(参见 How can I play an mp3 with pygame? 和 how to play wav file in python?)。