【问题标题】:tkinter's .pack method isn't dividing the space properlytkinter 的 .pack 方法没有正确划分空间
【发布时间】:2018-09-27 22:51:06
【问题描述】:

试图弄清楚包装顺序。书上说

在为小部件分配空腔空间后,expand 将剩余的任何空间分开,并在其分配的空间内填充和锚定拉伸和定位小部件。

所以我写了以下内容,但不明白为什么 West 和 East 标签没有扩展到共享 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()

我看到的截图:

【问题讨论】:

    标签: python-3.x tkinter


    【解决方案1】:

    当您将north 打包到顶部时,它将占据可用空间的整个宽度。一旦你在顶部打包了一些东西,其他任何东西都无法进入它的左侧或右侧(不使用一些很少使用的附加选项)。然后,当您将west 打包到左侧时,它必须低于north

    这里是完整的packer算法的官方描述:

    packer 为每个 master 维护一个有序的 slave 列表,称为packing list。 -in、-after 和 -before 配置选项用于指定每个从机的主机以及从机在装箱单中的位置。如果没有为从站提供这些选项,则将从站添加到其父级的装箱单的末尾。

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

    packer 对每个 slave 执行以下步骤:

    1. 封隔器沿从机的 -side 选项给定的空腔侧面为从机分配一个矩形包裹。如果侧面是顶部或底部,则包裹的宽度是空腔的宽度,其高度是从属请求的高度加上 -ipady 和 -pady 选项。对于左侧或右侧,包裹的高度是空腔的高度,宽度是从属请求的宽度加上 -ipadx 和 -padx 选项。由于 -expand 选项,包裹可能会进一步扩大(请参阅下面的 EXPANSION)

    2. 打包机选择从机的尺寸。宽度通常是从属请求的宽度加上它的 -ipadx 选项的两倍,高度通常是从属请求的高度加上它的 -ipady 选项的两倍。但是,如果 -fill 选项为 x 或两者兼有,则从站的宽度被扩展以填充包裹的宽度,减去 -padx 选项的两倍。如果 -fill 选项为 y 或两者兼而有之,则从站的高度被扩展以填充包裹的宽度,减去 -pady 选项的两倍。

    3. 打包机将奴隶放置在包裹上。如果从属小于包裹,则 -anchor 选项确定从属将放置在包裹中的哪个位置。如果 -padx 或 -pady 不为零,则给定数量的外部填充将始终留在从属和包裹边缘之间。

    一旦给定的从机被打包,其包裹的面积将从空腔中减去,为下一个从机留下一个较小的矩形空腔。如果一个slave没有使用它所有的parcel,那么这个parcel中未使用的空间将不会被后续的slave使用。如果空腔变得太小而不能满足从机的需要,那么从机将被给予空腔中剩余的任何空间。如果空腔缩小到零尺寸,那么装箱单上的所有剩余从属设备将从屏幕上取消映射,直到主窗口变得足够大以再次容纳它们。

    取自http://tcl.tk/man/tcl8.5/TkCmd/pack.htm#M26

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

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


    要仅使用pack 获得您想要的行为,首先在顶部和底部打包两个框架(或几乎任何小部件的两个)。将expand 属性设置为True。然后,您可以让底部框架成为红色和绿色框架的主人。

    【讨论】:

    • 我对上述内容有所了解,但正是您给出的来源下的扩展段落解释了原因。 “额外的水平空间分布在 - 侧为左侧或右侧的可扩展从属设备中,额外的垂直空间分配给 - 侧为顶部或底部的可扩展从属设备。”不幸的是,我不知道如何解决这个问题并在小部件之间平均分配额外的空间......
    • @MaxJambon:我不知道你期待什么布局,所以我不知道如何给你更好的建议。 “共享 North 的一些垂直空间:” 太模糊了。
    • 我添加了我所期待的第二张图片,基本上西方和东方与北方平等地共享垂直空间。我尝试使用框架,但结果是一样的,或者当我调整窗口大小时框架本身没有拉伸。
    • @MaxJambon:我添加了更多说明。如果您阅读规范文档,它会告诉您,当您在左侧或右侧打包东西时,expand 将沿水平轴分配额外的空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多