为什么使用 python tkinter 时框架会调整大小?

2024-01-25

我的代码如下:

import tkinter as tk

#setting up window.
root = tk.Tk()
root.title("CSV Maker")
root.geometry("600x300")

#setting up frames.
leftFrame = tk.Frame(root, bg="red", width=300, height=300)
rightFrame = tk.Frame(root, bg="blue", width=300, height=300)
#placing frames on window.
leftFrame.grid(row=0, column=0)
rightFrame.grid(row=0, column=1)

#setting up labels.
inputPathLabel = tk.Label(leftFrame, text="Input File Path:")

#placing labels on frames.
inputPathLabel.grid(row=0, column=0)
root.mainloop()

当我删除标签时,我得到以下信息:

无标签 https://i.stack.imgur.com/Fy2mH.png

然而,当我保留下面的代码(带有标签)时,我得到了完全不同的结果。似乎框架的大小已调整为与我选择的尺寸不同的另一种尺寸,并且颜色消失了。为什么是这样?

带标签 https://i.stack.imgur.com/3ij5y.png


这就是 tkinter 的设计目的。当你使用pack or grid,框架(或任何其他小部件)将缩小或扩大以尝试适应其所有内容。

99.9% 的情况下,这就是您想要的行为。 Tkinter 非常擅长将 GUI 调整为合适的大小。

来自官方文档grid:

网格几何管理器通常计算主单元必须有多大才能恰好满足其从单元的需求,并将主单元请求的宽度和高度设置为这些尺寸。这导致几何信息通过窗口层次结构向上传播到顶级窗口,以便整个子树调整自身大小以适应叶窗口的需要。然而,网格传播命令可用于关闭一个或多个主设备的传播。如果禁用传播,则网格将不会设置主窗口请求的宽度和高度。例如,如果您希望主窗口具有指定的固定大小,这可能很有用。

从文档中pack:

打包器通常会计算主设备必须有多大才能恰好满足其从设备的需求,并将主设备所请求的宽度和高度设置为这些尺寸。这导致几何信息通过窗口层次结构向上传播到顶级窗口,以便整个子树调整自身大小以适应叶窗口的需要。然而,包传播命令可用于关闭一个或多个主设备的传播。如果禁用传播,则加壳器将不会设置加壳器请求的宽度和高度。例如,如果您希望主窗口具有指定的固定大小,这可能很有用。

请注意place没有相同的行为。来自place文档:

与许多其他几何管理器(例如打包器)不同,放置器不会尝试操纵主窗口或从属窗口的父级窗口的几何形状(即,它不会设置其请求的大小)。要控制这些窗口的大小,请将它们设置为类似框架和画布的窗口,并为此目的提供配置选项。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么使用 python tkinter 时框架会调整大小? 的相关文章

随机推荐