Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 特金特';s.pack方法不是';我不能正确地划分空间_Python 3.x_Tkinter - Fatal编程技术网

Python 3.x 特金特';s.pack方法不是';我不能正确地划分空间

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

想弄清楚包装顺序。书上说

在小部件被赋予空腔空间后,“展开”会分割所有剩余空间,并填充和锚定小部件,在其指定空间内拉伸和定位小部件

因此,我写了以下内容,无法理解为什么西方和东方的标签没有扩展到共享North的一些垂直空间:

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配置选项用于指定每个从属设备的主设备以及从属设备在装箱单中的位置。如果没有为从属设备提供这些选项,则从属设备将添加到其父设备装箱单的末尾

包装工通过按顺序扫描装箱单,为主机安排从机。在处理每个从机时,主机内的矩形区域仍未分配。这个区域称为空腔;对于第一个从属设备,它是主设备的整个区域

对于每个从机,封隔器执行以下步骤:

  • 封隔器沿从机的-侧选项给出的腔侧为从机分配矩形包裹。如果边为顶部或底部,则地块的宽度为空腔的宽度,其高度为从属设备的请求高度加上-ipady和-pady选项。对于左侧或右侧,地块的高度是空腔的高度,宽度是从机的请求宽度加上-ipadx和-padx选项。由于-expand选项,地块可能会进一步放大(请参见下面的展开)

  • 封隔器选择从动件的尺寸。宽度通常为从属设备请求的宽度加上其-ipadx选项的两倍,高度通常为从属设备请求的高度加上其-ipady选项的两倍。但是,如果-fill选项为x或两者兼有,则从属对象的宽度将扩展为填充地块的宽度,减去-padx选项的两倍。如果-fill选项为y或同时为y,则从属对象的高度将展开以填充地块的宽度,减去-pady选项的两倍

  • 打包机将从机放置在包裹上方。如果从属对象小于地块,则-anchor选项将确定从属对象在地块中的放置位置。如果-padx或-pady非零,则给定的外部填充量将始终保留在从属地块和地块边缘之间

  • 一旦一个给定的从机被打包,其包裹的面积将从空腔中减去,为下一个从机留下一个较小的矩形空腔。如果从属服务器未使用其所有地块,则地块中未使用的空间将不会被后续从属服务器使用。如果腔体太小,无法满足从属设备的需要,则将为从属设备提供腔体中剩余的任何空间。如果空腔缩小到零尺寸,则装箱单上的所有剩余从属设备将从屏幕上取消映射,直到主窗口变大,足以再次容纳它们

    取自

    从关于扩展的同一文档中(属性
    expand
    ):

    额外的水平空间分布在-side为左侧或右侧的可扩展从机之间,额外的垂直空间分布在-side为顶部或底部的可扩展从机之间



    要获得只使用
    pack
    所需的行为,请从顶部和底部打包两个框架(或任何小部件中的两个)开始。将
    expand
    属性设置为
    True
    。然后,您可以让底部框架成为红色和绿色框架的主框架

    我对上述内容有一个想法,但你给出的源代码下的扩展段解释了原因。“额外的水平空间分布在左侧或右侧的可扩展从机之间,而额外的垂直空间分布在顶部或底部的可扩展从机之间。”不幸的是,我不知道如何绕过这一点,使额外空间均匀分布(ish)在这些小部件中…@MaxJambon:我不知道你期望的是什么布局,所以我不知道如何给你更好的建议。“分享一些北方的垂直空间:”只是太模糊了。我添加了第二张我所期望的图片,基本上是西部和东部与北部平均分享垂直空间。我尝试过使用框架,但结果是一样的,或者当我调整窗口大小时框架本身没有拉伸。@MaxJambon:我补充了一点说明。如果您阅读规范文档,它会告诉您,当您在左侧或右侧打包东西时,
    expand
    会沿水平轴分配额外的空间。