繁体   English   中英

为什么在使用 python tkinter 时会调整帧大小?

[英]Why are frames resizing when using python tkinter?

我的代码如下:

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

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

无标签

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

带标签

这就是 tkinter 的设计工作方式。 当您使用packgrid ,框架(或任何其他小部件)将缩小或扩大以尝试适应其所有内容。

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

来自grid的官方文档:

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

pack的文档中:

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

请注意,该place没有相同的行为。 place文档:

与许多其他几何管理器(例如打包器)不同,布局器不会尝试操纵主窗口或从窗口的父窗口的几何图形(即,它不设置它们请求的大小)。 要控制这些窗口的大小,请使它们像框架和画布一样提供用于此目的的配置选项的窗口。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM