【问题标题】:PlaySound() slows down processPlaySound() 减慢进程
【发布时间】:2015-05-07 16:38:07
【问题描述】:

我的程序中有以下代码:

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 一起使用。有什么建议吗?

【问题讨论】:

  • 您尝试过使用多进程吗?
  • 我很抱歉措辞错误。我的意思是多线程。你可以试试这个tutorialspoint.com/python/python_multithreading.htm希望这会有所帮助。在您的情况下,请尝试使用另一个线程来播放声音。
  • 这个定义很容易在互联网上找到,也可以在上面给出的链接中找到。但想法是你将winsound.PlaySound('sound.wav', winsound.SND_FILENAME) 分离成一个不同的函数,让我们调用playsound()。要创建线程并运行它,您可以使用thread.start_new_thread( playsound, () ) 调用playsound 函数。记得导入thread

标签: python tkinter


【解决方案1】:

当您更改小部件的属性时,例如编辑内容、背景和浮雕,此更改不会立即出现,它们会被记录下来,并且只有在您将触发重绘应用程序的主循环交给主循环时才会生效。这会导致您观察到的行为:播放声音,然后回调结束并重绘显示您的更改。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-13
    • 1970-01-01
    相关资源
    最近更新 更多