为什么声音在其余代码之前播放?

Why does the sound play before the rest of the code?

我想让方块变绿和声音一起播放,或者如果这不可能,那么我想先让方块变绿。但我不知道为什么先播放声音... 这是我的代码:

def number(*args):
try:
    x = r.get()
    if x <= '3':
        s.configure('Danger.TFrame', background='green',
                    borderwidth=5, relief='raised')
        ttk.Frame(root, width=200, height=200, style='Danger.TFrame')
        winsound.PlaySound('dotto.wav', winsound.SND_FILENAME)
        print("green")
    elif x >= "5":
        s.configure('Danger.TFrame', background='red',
                    borderwidth=5, relief='raised')
        ttk.Frame(root, width=200, height=200, style='Danger.TFrame')
        print("red")
    else:
        s.configure('Danger.TFrame', background='orange',
                    borderwidth=5, relief='raised')
        ttk.Frame(root, width=200, height=200, style='Danger.TFrame')
        print("orange")
except:
    print("error")

我用的是winsound,正在播放的文件是dotto.wav。

谢谢,

winsound.PlaySound() 默认情况下是一个阻塞方法调用,这意味着它会等到播放完声音后再继续其他任何事情。 在您的情况下,“其他任何事情”可能包括渲染(现在是绿色的)块。

所以在你的示例代码中,你的 Block 在开始播放声音之前变为绿色,但你可能看不到,因为它不是重新 -在屏幕上绘制,直到声音结束后。

要告诉winsound你不想等待声音结束,你需要传递winsound.SND_ASYNC参数。

winsound.PlaySound('dotto.wav', winsound.SND_FILENAME | winsound.SND_ASYNC)