省略Toplevel的父参数

时间:2014-05-26 10:13:13

标签: python tkinter

我正在查看tkinter的Toplevel。根据我从effbot看到的内容,我可以省略其父级论点。

1-当我只使用Toplevel本身(注释掉root)时,它创建了自己的父级,我相信,因为两个窗口出现,只有在点击按钮后才会销毁一个。

2-如果我没有评论Tk(),它就可以了。两个窗户,一个根 - 一个顶部和破坏顶部。

3-如果我交换root和toplevel,首先toplevel再创建两个(就像第一种情况一样),然后root将创建另一个,这样就会出现三个窗口,只有toplevel被破坏。

import tkinter as tk

#root = tk.Tk()
top = tk.Toplevel()

#root.title("Foo")
top.title("Bar")
top.geometry("300x100")

tk.Button(top, text = "Destroy", command=top.destroy).pack()

top.mainloop()

问题是,有没有办法在Tk()之前创建顶层并只获得一个窗口或访问其父窗口并将其销毁?

P.S。我发现了这两个问题Toplevel in Tkinter: Prevent Two Windows from Opening&& tkinter child window opens two windows?。第一个问题是在第二个案例中,这不是我想要的,第二个问题还没有答案,他的问题有点不可复制。

此外,我试图获取其主值 - 手动销毁 - 就像这样,但似乎该值不存储在存储选项的字典中。

btn = tk.Button(top, text = "Destroy", command=top.destroy)
btn.pack()

print (btn["text"])
>>> Destroy
print (btn["master"])
>>>  _tkinter.TclError: unknown option "-master"

1 个答案:

答案 0 :(得分:1)

Toplevel不是创建它自己的父级,如果你不先创建一个小部件,任何小部件都会创建一个根窗口。在任何其他窗口小部件存在之前,必须有一个根窗口 - 这就是为什么它被称为 root 窗口。因此,要回答您的具体问题,不能在没有首先创建根窗口的情况下创建Toplevel的实例。