【问题标题】:Tkinter Creating Multiple Windows - Use new Tk instance or Toplevel or Frame? [closed]Tkinter 创建多个窗口 - 使用新的 Tk 实例或顶层或框架? [关闭]
【发布时间】:2016-05-28 19:17:02
【问题描述】:

我开始学习 Tkinter,并且每次都使用新的 Tk 实例创建新窗口。我刚读到这不是一个好习惯。如果是这样,为什么?怎样才能做得更好?我见过其他人使用 Toplevel 和 Frame 实例创建窗口。改用这些有什么好处/缺点?

以防万一:我正在为其编写代码的应用程序从登录窗口开始,然后进入第二个窗口,输入的密码是否正确。

【问题讨论】:

  • 这可能是重复的,但我不同意“太宽泛”。有一个非常简短的答案。由于神秘的原因,因为它有微妙的错误,直到它不起作用的代码是一个该死的讨厌。 (基于意外重复 Tk 实例的经验。)Bryan 完全正确。
  • 我同意,这不是真正的广泛。只有一个正确的答案。

标签: python python-2.7 user-interface tkinter


【解决方案1】:

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

如果您需要多个窗口,请创建一个Tk 的实例,然后其他窗口应该是Toplevel 的实例。

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

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

【讨论】:

  • 谢谢!所以肯定使用 Toplevel 实例而不是 Frame 实例? Frame 有何不同(当我尝试时,我可以同时使用这两种方法创建窗口...)
  • @Jonas:如果你想要一个单独的窗口,你唯一的选择是ToplevelFrame 只能存在于其他窗口中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多