Python 3.x 特金特';s.pack方法不是';我不能正确地划分空间
想弄清楚包装顺序。书上说 在小部件被赋予空腔空间后,“展开”会分割所有剩余空间,并填充和锚定小部件,在其指定空间内拉伸和定位小部件 因此,我写了以下内容,无法理解为什么西方和东方的标签没有扩展到共享North的一些垂直空间:Python 3.x 特金特';s.pack方法不是';我不能正确地划分空间,python-3.x,tkinter,Python 3.x,Tkinter,想弄清楚包装顺序。书上说 在小部件被赋予空腔空间后,“展开”会分割所有剩余空间,并填充和锚定小部件,在其指定空间内拉伸和定位小部件 因此,我写了以下内容,无法理解为什么西方和东方的标签没有扩展到共享North的一些垂直空间: from tkinter import * root = Tk() north = Label(root,text='North', bg='cyan') north.pack(side=TOP, expand=YES, fill=BOTH) west = Label
from tkinter import *
root = Tk()
north = Label(root,text='North', bg='cyan')
north.pack(side=TOP, expand=YES, fill=BOTH)
west = Label(root,text='West', bg='red')
west.pack(side=LEFT, expand=YES, fill=BOTH)
east = Label(root,text='East', bg='green')
east.pack(side=RIGHT, expand=YES, fill=BOTH)
root.mainloop()
我看到的截图:
当您将
北面
打包到顶部时,它将占据可用空间的全部宽度。一旦你在顶部打包了一些东西,其他任何东西都无法进入它的左侧或右侧(不使用一些很少使用的附加选项)。然后将west
打包到左侧时,它必须位于north
下方
以下是完整打包算法的官方说明:
对于每个主包装机,包装机维护一个有序的从包装清单,称为装箱单。-in、-after和-before配置选项用于指定每个从属设备的主设备以及从属设备在装箱单中的位置。如果没有为从属设备提供这些选项,则从属设备将添加到其父设备装箱单的末尾
包装工通过按顺序扫描装箱单,为主机安排从机。在处理每个从机时,主机内的矩形区域仍未分配。这个区域称为空腔;对于第一个从属设备,它是主设备的整个区域
对于每个从机,封隔器执行以下步骤:
expand
):
额外的水平空间分布在-side为左侧或右侧的可扩展从机之间,额外的垂直空间分布在-side为顶部或底部的可扩展从机之间
要获得只使用
pack
所需的行为,请从顶部和底部打包两个框架(或任何小部件中的两个)开始。将expand
属性设置为True
。然后,您可以让底部框架成为红色和绿色框架的主框架 我对上述内容有一个想法,但你给出的源代码下的扩展段解释了原因。“额外的水平空间分布在左侧或右侧的可扩展从机之间,而额外的垂直空间分布在顶部或底部的可扩展从机之间。”不幸的是,我不知道如何绕过这一点,使额外空间均匀分布(ish)在这些小部件中…@MaxJambon:我不知道你期望的是什么布局,所以我不知道如何给你更好的建议。“分享一些北方的垂直空间:”只是太模糊了。我添加了第二张我所期望的图片,基本上是西部和东部与北部平均分享垂直空间。我尝试过使用框架,但结果是一样的,或者当我调整窗口大小时框架本身没有拉伸。@MaxJambon:我补充了一点说明。如果您阅读规范文档,它会告诉您,当您在左侧或右侧打包东西时,expand
会沿水平轴分配额外的空间。