【发布时间】:2020-10-07 12:59:48
【问题描述】:
我正在使用 Python 开发 tkinter GUI,以在新窗口中生成错误消息。当运行如下所示的代码时,会播放错误噪音,然后在打开窗口之前暂停几秒钟。如果我用 winsound 注释掉该行,它会很好地打开它。
import tkinter as tk
import winsound
class Error_Window:
def __init__(self, txt):
self.root = tk.Tk()
self.root.title("Error")
self.lbl = tk.Label(self.root, text=txt)
self.lbl.pack()
winsound.PlaySound("SystemExit", winsound.SND_ALIAS)
self.root.mainloop()
我怀疑这可能是由于在到达 mainloop 命令之前完全播放了错误噪音。一种解决方案是在单独的线程中运行声音,但我听说应该避免使用 tkinter 进行多线程。在播放噪音的同时让它顺利打开有什么技巧吗?
【问题讨论】:
-
winsound有一个SND_ASYNC或类似的标志来在后台播放声音。一个单独的线程也是一个可行的解决方案——Tkinter 对此没有任何问题,只要你不从主线程以外的任何地方进行任何 Tkinter 调用。 -
只要您不从多个线程调用 tkinter 对象,多线程应该可以正常工作。在单独的线程中调用 winsound 应该可以正常工作。
-
@BryanOakley 哦,所以如果我在两个不同线程中的 tkinter 窗口中有两个函数,而 tkinter 在另一个线程中,会产生一些问题吗?
-
@CoolCloud:您应该只从单个线程访问 tkinter 对象。这是来自实际编写了一些 tk 代码的人:stackoverflow.com/a/38767665/7432