Tkinter中的Frame类有何作用?

5
下面的代码将构建一个基本的按钮GUI。
from tkinter import *
class App:
  def __init__(self, master):
    frame = Frame(master)
    frame.pack()
    self.button = Button(frame, 
                         text="QUIT", fg="red",
                         command=quit)
    self.button.pack(side=LEFT)
    self.slogan = Button(frame,
                         text="Hello",
                         command=self.write_slogan)
    self.slogan.pack(side=LEFT)
  def write_slogan(self):
    print("Tkinter is easy to use!")

root = Tk()
app = App(root)
root.mainloop()

但是,即使我将Frame类替换为master,它仍然显示相同的结果!

from tkinter import *
class App:
  def __init__(self, master):
    #frame = Frame(master)
    #frame.pack()
    self.button = Button(master, 
                         text="QUIT", fg="red",
                         command=quit)
    self.button.pack(side=LEFT)
    self.slogan = Button(master,
                         text="Hello",
                         command=self.write_slogan)
    self.slogan.pack(side=LEFT)
  def write_slogan(self):
    print("Tkinter is easy to use!")

root = Tk()
app = App(root)
root.mainloop()

为什么即使我们得到相同的结果,添加Frame类也非常重要呢?

如果在您的第一个示例中使用填充进行打包,您是否看到了区别?frame.pack(padx=10, pady=10)。有一些打包属性对于小部件集合非常有用,而框架只是为您包含了这些属性。 - Ron Norris
尝试过了,我会记住的。谢谢@RonNorris。 - Belle
2个回答

4
为什么即使我们得到相同的结果,添加Frame类也是如此重要呢?
在您的具体示例中,创建框架没有意义。
Tkinter中Frame类的目的是什么?
它的目的是作为一组小部件的容器,您希望将其视为逻辑单元。
例如,传统应用程序可能在顶部有一个工具栏,在左侧有一个导航面板,在主区域中,可能在底部有一个状态栏。您可以使用一个框架来包含工具栏中的所有小部件,另一个框架来包含状态栏中的所有小部件,并使用另一个框架来包含导航窗格中的小部件。

0

框架用于复杂布局。它们有助于将小部件分组到特定位置,而无需直接管理每个基本布局更改的布局。

有一些关于使用框架的文档在这里

如果您只是创建一个不需要许多小部件的简单界面,则可能不需要使用框架。

对于更复杂的界面,您可能希望使用框架来促进更好地管理布局。

一个例子:如果您在屏幕右侧设置了一组小部件,但后来决定将它们放在屏幕左侧,则可以更改框架的位置,所有内部小部件都会随之移动。如果您没有使用框架,则需要更改每个小部件的配置才能完成相同的移动。比起一开始就使用框架,这要花费更多的工作量。

这只是一个简单的例子,但它应该说明为什么框架对于GUI布局非常有用。

您还可以使用框架来装饰您的GUI。您可以将框架叠加在图像上,并更改框架的背景颜色以形成对比色,使您的GUI更具视觉吸引力。根据链接的文档,您可以使用框架作为分隔线,但我自己没有这样使用过。

我认为Tkinter中有许多其他方式可以使用框架,它们提供了比仅使用根窗口更好的GUI设计灵活性。


谢谢你,Sierra。看起来你在这方面很专业。你需要什么样的资源? - Belle
@Belle 我绝不是专家。我仅在二月份开始学习编程。自那时以来,我每天花费2到4个小时进行编程,其中很多时间都用于使用tkinter。你说的“我需要什么资源”是什么意思? - Mike - SMT
这是一个惊人的进步!你做得很好。我从4月19日开始,平均每天学习两个半小时,但仍然在挣扎中:(。资源方面,我的意思是你从哪里获取知识? - Belle
我想你在问我学习编程时用了哪些资源。那么,在第一周,我完成了codecadamy.com上的Python课程。然后,我花了一些时间编写自己的笔记程序,并在需要帮助时在stackoverflow上寻求帮助。但是,我80-90%的学习都来自于在stackoverflow上帮助别人。我会找到一个新问题并进行一些谷歌搜索,然后尝试在我的电脑上编写可行的代码。如果我能得到一个好的答案,我会确保知道为什么我的答案有效,然后发布我的答案。对我来说,学习的最佳方式就是帮助他人解决问题。 - Mike - SMT
祝你一切顺利。最后一个问题,你学习编程语言的目标是什么? - Belle
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接