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()