Python Tkinter创建多个窗口-使用新Tk实例或顶层或框架?

Python Tkinter创建多个窗口-使用新Tk实例或顶层或框架?,python,python-2.7,user-interface,tkinter,Python,Python 2.7,User Interface,Tkinter,我开始学习Tkinter,每次都用Tk的新实例创建新窗口。我刚读到那不是一个好的做法。若然,原因为何?如何才能做得更好?我见过其他人用顶级和框架实例创建窗口。使用这些替代品的优点/缺点是什么 如果这有区别:我正在编写代码的应用程序从一个登录窗口开始,然后进入第二个窗口。输入的密码是正确的。每个tkinter程序只需要一个Tk的实例。Tkinter是嵌入式tcl解释器的包装器。Tk的每个实例都有自己的解释器副本,因此两个Tk实例有两个不同的名称空间 如果需要多个窗口,请创建一个Tk实例,然后其他窗

我开始学习Tkinter,每次都用Tk的新实例创建新窗口。我刚读到那不是一个好的做法。若然,原因为何?如何才能做得更好?我见过其他人用顶级和框架实例创建窗口。使用这些替代品的优点/缺点是什么


如果这有区别:我正在编写代码的应用程序从一个登录窗口开始,然后进入第二个窗口。输入的密码是正确的。

每个tkinter程序只需要一个Tk的实例。Tkinter是嵌入式tcl解释器的包装器。
Tk
的每个实例都有自己的解释器副本,因此两个
Tk
实例有两个不同的名称空间

如果需要多个窗口,请创建一个
Tk
实例,然后其他窗口应为
Toplevel
实例

虽然您可以创建、销毁和重新创建根窗口,但实际上没有意义。相反,为登录屏幕创建根窗口,然后删除登录屏幕小部件并用第二个窗口替换它们


如果您将每个“窗口”设置为从
tk.Frame
继承的单独类,那么这将变得微不足道。因为tkinter会在一个框架被销毁时销毁所有子窗口小部件,所以很容易从一个“窗口”切换到另一个“窗口”。创建
LoginFrame
的实例,并将其打包到根窗口中。当他们输入了正确的密码后,销毁该实例,创建一个
MainWindow
实例并打包。

每个tkinter程序只需要一个
Tk
实例。Tkinter是嵌入式tcl解释器的包装器。
Tk
的每个实例都有自己的解释器副本,因此两个
Tk
实例有两个不同的名称空间

如果需要多个窗口,请创建一个
Tk
实例,然后其他窗口应为
Toplevel
实例

虽然您可以创建、销毁和重新创建根窗口,但实际上没有意义。相反,为登录屏幕创建根窗口,然后删除登录屏幕小部件并用第二个窗口替换它们


如果您将每个“窗口”设置为从
tk.Frame
继承的单独类,那么这将变得微不足道。因为tkinter会在一个框架被销毁时销毁所有子窗口小部件,所以很容易从一个“窗口”切换到另一个“窗口”。创建
LoginFrame
的实例,并将其打包到根窗口中。当他们输入了正确的密码后,销毁该实例,创建一个
MainWindow
的实例并打包。

这可能是重复的,但我不同意“太宽”。答案很简单。由于神秘的原因,代码一直工作到它不工作为止,因为它有微妙的bug,这是一个该死的麻烦。(基于意外重复Tk实例的经验)Bryan说得完全正确。我同意,这不是真的。只有一个正确答案。这可能是重复的,但我不同意“太宽泛”。答案很简单。由于神秘的原因,代码一直工作到它不工作为止,因为它有微妙的bug,这是一个该死的麻烦。(基于意外重复Tk实例的经验)Bryan说得完全正确。我同意,这不是真的。答案只有一个,谢谢!所以一定要使用顶级实例而不是框架实例?框架有什么不同(当我试用时,我可以用这两种方法创建窗口…@Jonas:如果你想要一个单独的窗口,你唯一的选择就是
Toplevel
框架
只能存在于其他窗口中。谢谢!所以一定要使用顶级实例而不是框架实例?框架有什么不同(当我试用时,我可以用这两种方法创建窗口…@Jonas:如果你想要一个单独的窗口,你唯一的选择就是
Toplevel
框架
只能存在于其他窗口中。