【问题标题】:python tkinter code layoutpython tkinter 代码布局
【发布时间】:2023-04-05 16:07:02
【问题描述】:

到目前为止,我会为每个界面创建不同的模块,启动屏幕,登录然后主界面并将每个模块传递给 main_window。

class MainWindow(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

然后我将它传递给每个模块。我在想有一种更好的方法和更有条理的方法来创建 tkinter GUI。我是在一个模块中创建所有屏幕并调用它们还是创建单独的模块?

编辑关于 Tk 和 Toplevel 的解释也很好,因为我不完全理解它们,我通常使用 Tk()

我相对较新将类用作对象,tk.Tk。任何建议或代码布局示例都会很好。

【问题讨论】:

  • Tk 创建主窗口 - 您应该只使用一个主窗口。 Toplevel 创建其他窗口 - 您可以使用许多其他窗口。也许使用 Frame 创建小部件,然后您可以将其添加到任何窗口 - TkToplevel
  • 创建 main_window 然后通过参数将主窗口传递给每个模块是否健康,还是应该将所有界面内容放在一个文件中?
  • 查看其他小部件 - 您总是将 parent 作为第一个参数传递。它可以是TkToplevel 或其他小部件,即。 Frame。这样您就可以将其用作主窗口或弹出/对话框窗口或其他小部件中的元素。
  • 好的,那么我是在一个文件中为我的所有屏幕创建整个界面还是将其分散到每个屏幕一个文件中?
  • 没关系 - 如果代码很长,那么使用很多文件。

标签: python layout tkinter


【解决方案1】:

小部件存在于具有单个根的树状层次结构中。根窗口是Toplevel,但由于它是根窗口,因此还有一些其他特殊行为。单个根窗口和Toplevel 的所有实例都是浮动在屏幕上的独立窗口。

要使 tkinter 应用程序正常工作,您必须拥有一个根窗口,但您可以拥有任意数量的 Toplevel 实例。如果您没有显式创建根窗口,则在您第一次尝试创建其他小部件时会创建一个根窗口。您不应该编写依赖于这种行为的 tkinter 代码。显式优于隐式。

在一个单独的模块中定义每个接口,并将根窗口的实例传递给其他窗口的构造函数是完全合理的——而且通常更可取。

【讨论】:

  • 谢谢!为每个小部件创建框架是否也明智,这些小部件将作为一个对象出现在根窗口上,就像我在我的回答中看到的那样为主窗口所做的那样?
  • @JoshuaNixon:我不知道您所说的“如我的回答中所见”是什么意思。我没有看到您的任何答案,并且您问题中的代码不包含任何框架。
  • 谢谢!为每个小部件创建框架是否也明智,这些小部件将作为一个对象出现在根窗口上,就像我在我的问题中看到的主窗口一样?我的意思是我应该像创建主窗口一样创建每个框架。所以为每个框架创建一个类 tk.Frame.__init__ 等
猜你喜欢
  • 2017-12-24
  • 2013-05-11
  • 1970-01-01
  • 2013-08-31
  • 2021-08-17
  • 2013-03-24
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多