Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么要将小部件打包到框架中,而不是直接打包到根窗口中?_Python_Tkinter - Fatal编程技术网

Python 为什么要将小部件打包到框架中,而不是直接打包到根窗口中?

Python 为什么要将小部件打包到框架中,而不是直接打包到根窗口中?,python,tkinter,Python,Tkinter,我正在通过构建一个机票应用程序来学习Python。我目前正在学习用于GUI的TkInter,我想知道为什么我必须创建一个容器(框架),而不是将所有内容都放在root=Tk()中,这似乎是可行的 另外,ttk不是tkinter的一部分吗,因此我不需要第二行(从tkinter导入ttk) 这是我的密码: from tkinter import * from tkinter import ttk root = Tk() frame = Frame(root) root.title("AirTix"

我正在通过构建一个机票应用程序来学习Python。我目前正在学习用于GUI的TkInter,我想知道为什么我必须创建一个容器(框架),而不是将所有内容都放在
root=Tk()
中,这似乎是可行的

另外,
ttk
不是
tkinter
的一部分吗,因此我不需要第二行(
从tkinter导入ttk

这是我的密码:

from tkinter import *
from tkinter import ttk

root = Tk()

frame = Frame(root)
root.title("AirTix")

flight_title = Label(frame, text = "Flights").grid()

root.mainloop()
谢谢

我想知道为什么我必须创建一个容器(框架),而不是把所有东西都放在
root=Tk()

您不必创建容器。无论是什么教程或书告诉你,你一定是错的。在根窗口中创建所有内容没有错

也就是说,除了最琐碎的应用程序之外,将小部件组织在逻辑组中非常有帮助,每个逻辑组都是一个框架(或者,可能是一个画布或PanedWindow)。这使您可以灵活地为每个截面使用最佳几何图形管理器(
pack
place
、或
grid

例如,有一个工具栏,它是一个框架,从左到右排列着一堆按钮。对于底部状态栏,情况可能也是如此。主体可能是一个框架,其中小部件排列在网格中

<代码>网格< /COD>使用起来可能有点复杂,Pox<代码>擅长在一个水平行(工具栏或状态栏)中放置窗口小部件,或者在顶部放置工具栏,在底部放置状态栏,在中间的主要区域。

另外,
ttk
不是tkinter的一部分吗,因此我不需要第二行(
从tkinter导入ttk

尽管ttk是tkinter的一部分,但当您从tkinter导入所有内容时,它不会被导入

此外,使用通配符导入是不好的做法。与其这样做,不如:

from tkinter import *
root = Tk()
…可以说这样做更好:

import tkinter as tk
root = tk.Tk()

使用前者,您可能会使用或不使用一堆东西来污染全局名称空间。使用后者,您只需导入一件东西。此外,它使您的代码更加自我记录,因为当您希望使用tk包中的对象或类时,它会使您的代码更加清晰。

您可以直接打包小部件如果您想创建更复杂的布局,可以将它们打包到
Tk
窗口中,但如果您想创建更复杂的布局,将它们打包到一个框架中最终会给您带来更大的灵活性。例如,如果您想将几个小部件移动到一起,只需移动包含它们的框架即可。
ttk
tkinter
的子模块,因此您必须在创建时导入它e正在做。谢谢!如果我使用网格,框架是必要的吗?它可能是。当你了解更多关于在窗口上“布局”小部件的信息时,特别是“网格”和“包”(以及最终的“位置”)布局管理器,你将了解到你可以创建许多组合。你应该为每一组我认为有意义的小部件使用
Frame
。例如,你可以为计算器创建数字按钮并将它们放在一个框架中。然后你可以将同一个框架用于一个调用应用程序。同样令人感动的是,这将非常激烈如果数字按钮没有包含在父窗口小部件中,则很难一个接一个或类似循环地移动它们,无论是框架还是其他。Tk
是GUI的主窗口,这有其局限性。而框架通常表示一组小部件,为了方便起见打包在一起。您可以选择将该框架放入主窗口或您可以选择其他窗口。