0

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

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。

谢谢,

4

1 回答 1

1

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

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

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

winsound.PlaySound('dotto.wav', winsound.SND_FILENAME | winsound.SND_ASYNC)
于 2020-12-27T22:47:23.273 回答