gpt4 book ai didi

python - 为什么将小部件打包到框架中而不是直接将它们打包到根窗口中?

转载 作者:行者123 更新时间:2023-12-01 02:20:05 24 4
gpt4 key购买 nike

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

此外,ttk 不是 tkinter 的一部分,因此我不必有第二行(from tkinter import 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()

谢谢!

最佳答案

I want to know why I have to create a container (frame) instead of just putting everything in root = Tk() which seems to work.

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

话虽这么说,除了最琐碎的应用程序之外,它可以极大地帮助您将小部件组织在逻辑组中,每个逻辑组都是一个框架(或者也许是一个 Canvas 或 PanedWindow) )。这使您可以灵活地为每个部分使用最佳的几何管理器(packplacegrid)。

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

grid 使用起来可能有点复杂,而 pack 擅长将小部件放置在单个水平行(工具栏或状态栏)或列(工具栏)中顶部,状态栏在底部,主要区域在中间。

Also, isn't ttk part of tkinter, therefore I shouldn't have to have the 2nd line (from tkinter import ttk)?

尽管 ttk 是 tkinter 的一部分,但当您从 tkinter 导入所有内容时,它不会被导入。许多Python包都是这样的,子模块必须显式导入。

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

from tkinter import *
root = Tk()

...这样做可以说更好:

import tkinter as tk
root = tk.Tk()

对于前者,您最终会用一堆您可能使用或可能不使用的东西污染全局 namespace 。对于后者,您只导入一件事。另外,它使您的代码更加自文档化,因为当您期望使用 tk 包中的对象或类时,它会变得非常清晰。

关于python - 为什么将小部件打包到框架中而不是直接将它们打包到根窗口中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48045147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com