我正在写一个模块,我想支持弹出对话框来指示错误,但我不需要或不需要根窗口(因为我希望模块独立于主GUI和可在多个呼叫应用程序之间共享)。我试图干脆这样做:使用tkMessageBox而不导入Tkinter
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!")
...但即使这样的作品,似乎klunky到引入一个模块并实例化一个对象,以便我可以摆脱它。另外我不想混淆这个根和调用应用程序中的“真正”根。
回到第一个例子,很显然tkMessageBox
正在做一些事情来自己创建根窗口。有没有什么办法可以抢到那个根窗口的引用,所以我可以withdraw()
呢?
(环境是Windows 7和Python 2.7.3。)
感谢您的答案,尤其是链接。即使我无法撤消自动创建的根窗口,但我仍然可以获得我想要的结果,因为如果我已经在自己的调用应用程序中创建了一个根窗口,它将不会首先创建该根窗口。 (在任何情况下,我都会使用这个模块。) – JDM 2013-03-11 18:17:31
@JDM自动生成的根窗口可以通过创建没有'master'参数的窗口部件来访问,然后撤回它的父窗口,比如'Tkinter.Button() .master.withdraw()'。但是,这是一个丑陋的解决方案,您的解决方案更加明确。 – 2013-03-11 18:43:18