Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在每次按下按钮时播放声音而不冻结Tkinter_Python_Python 3.x_Tkinter - Fatal编程技术网

Python 如何在每次按下按钮时播放声音而不冻结Tkinter

Python 如何在每次按下按钮时播放声音而不冻结Tkinter,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我一直在修补几天前完成的Tkinter项目,我想添加一些声音,让它更有趣 我用winsound添加了如下按钮声音: (简化代码) 这在技术上是可行的,但由于代码是同步运行的,GUI会冻结,直到声音完全播放为止 为了解决这个问题,我使用线程在后台播放声音,而函数的其余部分运行 像这样: (简化代码) 同样,它在技术上是有效的,但是线程只能启动一次,所以我被困在这里 有没有其他方法可以实现这一点?因此,我最终放弃了那部分代码,并用pygame模块替换它,因为我发现它更灵活,但是是的,移动thread

我一直在修补几天前完成的Tkinter项目,我想添加一些声音,让它更有趣

我用winsound添加了如下按钮声音:

(简化代码)

这在技术上是可行的,但由于代码是同步运行的,GUI会冻结,直到声音完全播放为止

为了解决这个问题,我使用线程在后台播放声音,而函数的其余部分运行

像这样:

(简化代码)

同样,它在技术上是有效的,但是线程只能启动一次,所以我被困在这里


有没有其他方法可以实现这一点?

因此,我最终放弃了那部分代码,并用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()