PlaySound()减慢了进程

时间:2015-05-07 06:58:19

标签: python tkinter

我的程序中有以下代码:

self["text"]="✖"              
self["bg"]="red"              
self["relief"] = SUNKEN
self.banged = True
self.lost = True
self.lettersLeft = 0
self.lettersBanged = self.lettB
winsound.PlaySound('sound.wav', winsound.SND_FILENAME)
messagebox.showerror("Letter Banging","Sorry, you lost the game!", parent=self)
for key in self.squares.keys():
    if self.squares[key].value == 3:
        self.squares[key].banged = False
        self.squares[key].expose()

我刚刚添加了winsound.PlaySound('sound.wav', winsound.SND_FILENAME)部分,它减慢了我的程序。事实上,它首先播放声音然后播放它之前的声音。我正在使用Python和tKinter。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

当您更改窗口小部件的属性(例如编辑内容,背景和浮雕)时,此更改不会立即显示,它们会被记录,并且只有在您将手提交到主窗口时才会生效,从而导致重新绘制应用程序。这导致您观察到的行为:声音播放,然后回调结束,重绘显示您的变化。

您将在播放声音的回调中花费的所有时间,您的应用程序将无法响应。如果您估计声音足够短,则可以在要首先显示的UI更改和PlaySound调用之间的某处添加self.update()

如果您想避免在应用中出现任何无响应,可以在另一个主题中播放声音

sound_thread = threading.Thread(target=lambda:winsound.PlaySound('sound.wav', winsound.SND_FILENAME))
sound_thread.start()