我正在编写一个模块,我想支持弹出对话框以指示错误,但我不需要或不需要根窗口(因为我希望模块独立于主GUI并且可以在多个窗口之间共享调用应用程序)。我试过这样做:
import tkMessageBox
[...stuff...]
if (errorCondition): tkMessageBox.showwarning("My Module","That won't work!")
...但是当我运行它时,消息框旁会出现一个根窗口。我知道withdraw()
方法,但由于我从未导入Tkinter
本身且从未实例化Tkinter.Tk()
,因此我无法使用withdraw()
。
另一种方法是继续导入Tkinter
,所以我可以自己创建根窗口,然后withdraw()
:
import Tkinter
import tkMessageBox
root = Tkinter.Tk()
root.withdraw()
[...stuff...]
if (errorCondition): tkMessageBox.showwarning("My Module","That won't work!")
...但即使这样有效,引入一个模块并实例化一个对象似乎很笨拙,所以我可以摆脱它。另外,我不想在这个根和调用应用程序中的“真正”根之间混淆。
回到第一个例子,很明显tkMessageBox
正在做一些事情,以便自己创建根窗口。有什么方法可以获取对该根窗口的引用,这样我可以withdraw()
吗?
(环境是Windows 7和Python 2.7.3。)
答案 0 :(得分:2)
tkMessageBox建立在Tkinter之上,因此不可能简单地删除它:模块的所有功能,如tkMessageBox.showwarning
,都是_show
函数的包装器。此函数根据您使用的对话框类型创建一个Message
对象,其中包含不同的参数。 Message
是Dialog
的子类,后者又是Toplevel
的子类。
Toplevel
是一个Tkinter小部件,因此定义Dialog
的此模块的第一行(除了注释)是:
from Tkinter import *
你的第二个解决方案是正确使用tkMessageBox的唯一方法,因为你被迫(至少在内部)使用Tkinter。
<强>参考文献:
答案 1 :(得分:0)
注意:tkMessageBox不使用tkSimpleDialog,它使用tkCommonDialog。 tkCommonDialog的代码是 here