0

我想调用一个函数(触发器)来隐藏一个图像,显示另一个图像并播放声音。声音必须最后播放,因为它会持续几秒钟,锁定一切。当我调用该功能时,我的警报声会播放几秒钟,然后显示一个图像,显示哪个传感器已触发(原始图像没有隐藏,不确定我在那里做错了什么,所以注释掉一次只处理一个问题)。

首先,我在我的代码中搜索“触发器”这个词的其他用途,看看我是否正在调用另一个函数。

我将图像显示线放在括号中。

在图像显示和声音播放之间添加了 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 个功能,这样我的程序就不会锁定?

如果有帮助的话,我在使用 IDLE 的 ubuntu 上。

4

1 回答 1

0

这是因为playsound()默认是一个阻塞函数,所以它会阻塞 tkinter 主循环的更新,直到声音文件完全播放。

您可以通过作为第二个参数传递以在playsound()非阻塞模式下执行:False

playsound("tng_red_alert1.mp3", False)

更新:由于block=FalseLinux 不支持,您需要使用线程来执行playsound()

import threading
...

threading.Thread(target=playsound, args=("tng_red_alert1.mp3",)).start()
于 2021-01-03T10:58:45.770 回答