Tkinter 显示错误:创建空白的 Tk 窗口。

6
我有一个程序需要向用户显示图形化错误信息。这是一个tkinter GUI,所以我使用tkinter.messagebox.showerror
当我调用showerror时,它会显示错误,但也会创建一个空白的"tk"窗口,这种窗口类似于调用Tk类的实例时创建的窗口,如root = Tk()
from tkinter.messagebox import showerror
showerror(title = "Error", message = "Something bad happened")

生成

上述代码的结果

我该如何使这个空白窗口不出现?


可能是如何去除Python Tkinter根窗口?的重复问题。 - TigerhawkT3
你是如何将这段代码与你的其他代码结合使用的?它是类的一部分吗?还是其他什么? - Iron Fist
给出的示例不属于任何东西。你可以说它在 __main__ 中。实际代码在一个函数内部,仅此而已。 - Ecko
2个回答

11
from Tkinter import *
from tkMessageBox import showerror
Tk().withdraw()
showerror(title = "Error", message = "Something bad happened")

在显示错误信息之前调用Tk().withdraw()将会隐藏根窗口。

注意:对于 Python 3.x,请使用from tkinter import *


你的导入语句在Python 3.x上可能运行良好,但我从未在高于2.5的任何版本上使用过Tkinter,因此如果我的导入语句不正确,请忽略它! - maccartm
只要你的导入与我的解决方案配合良好,那就没问题了。我的代码只是展示我必须使用的内容。 - maccartm
如果我使用 Tk().withdraw(),在我的回调方法执行完后,程序不会结束。有任何想法为什么会这样? - Nagabhushan S N
1
showerror 关闭后需要销毁 Tk() 吗?如果是的话,@NagabhushanSN 的解决方案似乎更完整。 - Sun Bear

6

此答案所述,Tkinter在创建任何其他小部件/对话框之前都需要一个根窗口。如果没有根窗口,则tkinter会创建一个。因此,要使空白窗口消失,首先我们需要自己创建一个根窗口,隐藏它并在对话框完成后销毁它。下面是示例代码:

from tkinter import Tk
from tkinter.messagebox import showerror

root = Tk()
root.withdraw()
showerror(title = "Error", message = "Something bad happened")
root.destroy()

注意:仅当您只需显示对话框且不存在其他窗口时,才适用此内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接