tkinter的Tk和Toplevel课程有什么区别?

Al *_*art 13 python tkinter python-3.x

在Python 3中,我从交互式shell运行以下命令:

>>> import tkinter
>>> type(tkinter.Tk())
<class 'tkinter.Tk'>
>>> type(tkinter.Toplevel())
<class 'tkinter.Toplevel'>
Run Code Online (Sandbox Code Playgroud)

这两个都创建了单独的窗口.我假设tkinter.Tk()返回tkinter应用程序的"主"窗口,而任何其他窗口应该创建tkinter.Toplevel().

我注意到如果你关闭tkinter.Tk()窗户,两个窗户都会关闭.此外,如果您在tkinter.Toplevel()没有调用的情况下调用tkinter.Tk(),则会创建两个窗口(其中一个窗口是"主"窗口,当关闭时,它也将关闭Toplevel窗口).

这准确吗?我还应该关注其他任何不同之处吗?

Bry*_*ley 12

您的摘要是准确的.tkinter的核心架构特征之一是小部件存在于一个只有一个根窗口的层次结构中.根窗口是实例化时获得的Tk.

实例化Tk不只是创建一个窗口,它初始化整个tkinter框架.它实际上启动了一个隐藏的tcl解释器,它可以完成管理小部件的实际工作.Tkinter只是这个解释器的python包装器.

如果您尝试创建其他窗口小部件而不先显式创建根窗口,则会自动创建一个窗口,因为每个tkinter应用程序必须只有一个根窗口.