Tkinter中Frame类的目的是什么?

时间:2017-06-27 15:16:10

标签: python tkinter

下面的代码将构建一个基本按钮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类如此重要?

2 个答案:

答案 0 :(得分:4)

  

如果我们要获得相同的结果,为什么添加Frame类如此重要?

在您的具体示例中,创建框架没有意义。

  

Tkinter中Frame类的用途是什么?

目的是充当您想要视为逻辑单元的一组小部件的容器。

例如,传统应用可能在顶部有一个工具栏,左侧是导航面板,主要区域,底部可能有一个状态栏。您可以使用框架来包含工具栏中的所有窗口小部件,使用状态栏中所有窗口小部件的另一个框架,以及用于在导航窗格中包含窗口小部件的另一个框架。

答案 1 :(得分:0)

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

有一些关于帧HERE的使用的文档。

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

如果是更复杂的界面,您可能希望使用框架来提高布局的可管理性。

一个例子:如果您在屏幕右侧设置了一组小部件,但后来决定您希望它们位于屏幕的左侧,则可以更改框架的位置以及所有里面的小部件会随之移动。如果您没有使用框架,那么您需要更改每个小部件配置以完成相同的移动。然后使用框架开始做更多的工作。

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

您还可以使用框架来装饰GUI。您可以在图像顶部对图层进行分层,并将框架的背景更改为对比色,以使您的GUI更具视觉吸引力。您可以根据链接的文档使用框架作为分隔线,但我没有以这种方式使用它。

我想说在Tkinter中有更多的方法可以使用框架,它们提供了更好的GUI设计灵活性,然后只使用根窗口。