Python 如何在每次按下按钮时播放声音而不冻结Tkinter
我一直在修补几天前完成的Tkinter项目,我想添加一些声音,让它更有趣 我用winsound添加了如下按钮声音: (简化代码) 这在技术上是可行的,但由于代码是同步运行的,GUI会冻结,直到声音完全播放为止 为了解决这个问题,我使用线程在后台播放声音,而函数的其余部分运行 像这样: (简化代码) 同样,它在技术上是有效的,但是线程只能启动一次,所以我被困在这里Python 如何在每次按下按钮时播放声音而不冻结Tkinter,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我一直在修补几天前完成的Tkinter项目,我想添加一些声音,让它更有趣 我用winsound添加了如下按钮声音: (简化代码) 这在技术上是可行的,但由于代码是同步运行的,GUI会冻结,直到声音完全播放为止 为了解决这个问题,我使用线程在后台播放声音,而函数的其余部分运行 像这样: (简化代码) 同样,它在技术上是有效的,但是线程只能启动一次,所以我被困在这里 有没有其他方法可以实现这一点?因此,我最终放弃了那部分代码,并用pygame模块替换它,因为我发现它更灵活,但是是的,移动thread
有没有其他方法可以实现这一点?因此,我最终放弃了那部分代码,并用pygame模块替换它,因为我发现它更灵活,但是是的,移动threadsound=。。。acw1668指出的into printtext()解决了线程的问题
非常感谢acw1668将
threadsound=…
移动到printtext()
中。谢谢@acw1668
import winsound
from Tkinter import *
root = Tk()
canvas = Canvas(root, height=500, width=500)
canvas.pack()
def printtext():
winsound.PlaySound("button.wav", winsound.SND_ALIAS)
print("Hi")
button = Button(root, text=("button"), command=printtext)
button.pack()
root.mainloop()
import winsound
import threading
from tkinter import *
root = Tk()
canvas = Canvas(root, height=500, width=500)
canvas.pack()
def playsound():
winsound.PlaySound("button.wav", winsound.SND_ALIAS)
threadsound = threading.Thread(target=playsound)
def printtext():
threadsound.start()
print("Hi")
button = Button(root, text=("button"), command=printtext)
button.pack()
root.mainloop()