2017-07-13 38 views
0

我的代码如下:为什么使用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() 

当我删除的标签,我得到如下:

Without label

然而,当我离开的代码,因为它是低于(含标签),我得到了完全不同的结果。看起来好像该框架被调整为另一个尺寸,而不是我选择的尺寸,并且颜色消失。为什么是这样?

With label

回答

1

那简直是Tkinter的是如何设计的工作。当您使用packgrid时,帧(或任何其他小部件)将缩小或展开,以尝试适合其所有内容。

99.9%的时间,这是你想要的行为。 Tkinter非常擅长将GUI设置为合适的大小。

grid官方文档:

网格几何经理通常计算主必须是多大,只是恰好满足其奴隶的需求,并将其设置在主人的要求宽度和高度到这些尺寸。这导致几何信息通过窗口分层结构向上传播到顶层窗口,以便整个子树自身的大小以适应叶窗口的需要。但是,网格传播命令可用于关闭一个或多个主站的传播。如果传播被禁用,则网格不会设置主窗口的请求宽度和高度。例如,如果您希望主窗口具有您指定的固定大小,这可能很有用。

pack的文档:

封隔器通常计算主必须有多大,只是恰好满足其奴隶的需求,它的主人的要求宽度和高度设置为这些尺寸。这导致几何信息通过窗口分层结构向上传播到顶层窗口,以便整个子树自身的大小以适应叶窗口的需要。但是,pack传播命令可能用于关闭一个或多个主设备的传播。如果禁止传播,那么封隔器不会设置封隔器所要求的宽度和高度。例如,如果您希望主窗口具有您指定的固定大小,这可能很有用。

请注意place不具有相同的行为。从place文档:

不像许多其他几何图形管理器(如封隔器)砂矿不作任何企图操控主窗口的几何形状或从窗户父母(即它不设置其要求的尺寸)。为了控制这些窗口的大小,使它们像窗口一样的窗口和为此提供配置选项的画布。

+0

任何想法的背景颜色去?你在说标签/按钮/任何大小都会覆盖指定的帧大小? – Joel

+0

@Joel:它在标签后面。添加一些填充来查看它(例如:'inputPathLabel。网格(行= 0,列= 0,padx = 20,pady = 20)') –

+0

你一直非常有帮助。谢谢。 – Joel

相关问题