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

2024-06-16 10:56:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在通过构建一个机票应用程序来学习Python。我目前正在学习TkInter for the GUI,我想知道为什么我必须创建一个容器(框架),而不是把所有的东西都放在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()

谢谢!你知道吗


Tags: thefromimport应用程序fortitletkintergui
1条回答
网友
1楼 · 发布于 2024-06-16 10:56:29

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

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

也就是说,对于除了最琐碎的应用程序之外的任何应用程序来说,它都非常有助于在逻辑组中组织小部件,每个逻辑组都是一个框架(或者,可能是一个画布或PanedWindow)。这使您可以灵活地为每个部分使用最佳几何图形管理器(packplacegrid)。你知道吗

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

^ }使用起来可能有点复杂,^ {CD1>}擅长在单个水平行(工具栏或状态栏)中放置窗口小部件,或在顶部放置工具栏,在底部放置状态栏,在中间放置主区域。你知道吗

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()

对于前者,您最终会用一堆您可以使用或不可以使用的东西来污染全局名称空间。对于后者,你只需要输入一件东西。另外,它使您的代码更加自我文档化,因为当您希望使用tk包中的对象或类时,它使您的代码更加清晰。你知道吗

相关问题 更多 >