Python3 Playsound Tkinter 代码未按预期顺序 运行
Python3 Playsound Tkinter code not running in order expected
我想调用一个函数(触发器)来隐藏一张图片,显示另一张图片并播放声音。声音必须持续播放几秒钟,因为它会锁定所有内容。当我调用该功能时,我的警报声音会播放几秒钟,然后会显示一个图像,显示触发了哪个传感器(原始图像不会隐藏,不确定我在那里做错了什么,所以注释掉一次只处理一个问题).
首先,我在我的代码中搜索了“触发器”一词的其他用法,看看我是否在调用另一个函数。
我把图片显示行放在括号里了
在图像显示和声音播放之间添加了 1 秒的延迟。
尝试在图像显示函数调用的另一个函数中让我的闹钟声音,所以按下按钮调用图像显示函数,图像显示函数调用播放声音函数。
每次播放声音,然后播放结束时显示图像。播放声音时程序被锁定
Button(root, text='Trigger Security', bg='#F0F8FF', font=('arial', 12, 'normal'), command=trigger).place(x=10, y=95)
def trigger():
#canvas.create_image(260,-70, anchor=NW, image=bowstbradarm, state='hidden')
canvas.create_image(260,-70, anchor=NW, image=bowstbradar, state='normal')
playsound("tng_red_alert1.mp3")
是否可以同时 运行 2 个函数,这样我的程序就不会锁定?
如果有帮助,我正在 ubuntu 使用 IDLE。
因为playsound()
默认是阻塞函数,所以会阻塞tkinter mainloop更新,直到声音文件播放完毕。
您可以通过传递 False
作为第二个参数以非阻塞模式执行 playsound()
:
playsound("tng_red_alert1.mp3", False)
更新:由于Linux不支持block=False
,您需要使用线程来执行playsound()
:
import threading
...
threading.Thread(target=playsound, args=("tng_red_alert1.mp3",)).start()
我想调用一个函数(触发器)来隐藏一张图片,显示另一张图片并播放声音。声音必须持续播放几秒钟,因为它会锁定所有内容。当我调用该功能时,我的警报声音会播放几秒钟,然后会显示一个图像,显示触发了哪个传感器(原始图像不会隐藏,不确定我在那里做错了什么,所以注释掉一次只处理一个问题).
首先,我在我的代码中搜索了“触发器”一词的其他用法,看看我是否在调用另一个函数。
我把图片显示行放在括号里了
在图像显示和声音播放之间添加了 1 秒的延迟。
尝试在图像显示函数调用的另一个函数中让我的闹钟声音,所以按下按钮调用图像显示函数,图像显示函数调用播放声音函数。
每次播放声音,然后播放结束时显示图像。播放声音时程序被锁定
Button(root, text='Trigger Security', bg='#F0F8FF', font=('arial', 12, 'normal'), command=trigger).place(x=10, y=95)
def trigger():
#canvas.create_image(260,-70, anchor=NW, image=bowstbradarm, state='hidden')
canvas.create_image(260,-70, anchor=NW, image=bowstbradar, state='normal')
playsound("tng_red_alert1.mp3")
是否可以同时 运行 2 个函数,这样我的程序就不会锁定?
如果有帮助,我正在 ubuntu 使用 IDLE。
因为playsound()
默认是阻塞函数,所以会阻塞tkinter mainloop更新,直到声音文件播放完毕。
您可以通过传递 False
作为第二个参数以非阻塞模式执行 playsound()
:
playsound("tng_red_alert1.mp3", False)
更新:由于Linux不支持block=False
,您需要使用线程来执行playsound()
:
import threading
...
threading.Thread(target=playsound, args=("tng_red_alert1.mp3",)).start()