简言之,打包机并不是为了直接创建你要创建的布局而设计的。你可以做,但它需要一些额外的帧。在这个您显然要创建网格的特殊情况下,grid可以说是更好的选择。在
在我解释为什么会这样之前,让我提出一个解决方案。创建另一个名为“CD”的帧,它将用于同时保存C和{}。然后您可以将C打包到左边,D到右边,然后将这个框架放在B下面。这就是使用封隔器达到预期效果的方法。在A = tk.LabelFrame(root,text='A', bd=2)
B = tk.LabelFrame(root,text='B', bd=2)
CD = tk.Frame(root)
C = tk.LabelFrame(CD,text='C', bd=2)
D = tk.LabelFrame(CD,text='D', bd=2)
E = tk.LabelFrame(root,text='E', bd=2)
C.pack(side=tk.LEFT,fill=tk.BOTH, expand=tk.TRUE)
D.pack(side=tk.RIGHT,fill=tk.BOTH, expand=tk.TRUE)
A.pack(fill=tk.BOTH, expand=tk.TRUE)
B.pack(fill=tk.BOTH, expand=tk.TRUE)
CD.pack(fill=tk.BOTH, expand=tk.TRUE)
E.pack(side=tk.BOTTOM, fill=tk.BOTH, expand=tk.TRUE)
解释封隔器
封隔器的工作方式是沿着未分配的空间一侧保留一块空间。当包装顶部占满空间时,
让我试着用一些截图来描述它。在所有情况下,下面的屏幕截图并不显示帧,它们显示了打包机管理的已分配和未分配的空间量。在
当沿着顶部打包A(如果不指定边,则默认为top),则会为根窗口的整个宽度保留一块空间。因为您将其压缩到顶部,所以剩下的空间只有A以下。从此以后,A的左边或右边都不能打包。在
(实际上,您可以使用一些高级选项将内容向左或向右放置,但这超出了本文的描述范围)
当您沿着顶部打包B时,唯一可用的空间在A下方。同样,因为您是沿着顶部打包的,在打包B之后,现在唯一可用的可用空间将在B以下。在
当您沿着左边打包C时,将为剩余空间的整个高度保留一块空间。这意味着不能在C下面放置任何内容。所有剩余的空间都在C的右侧,B下方。在
打包D时,它必须位于C的右侧和B的下方。因为您将其打包到右侧,它将保留D上方和下方的所有剩余垂直空间。在
当你沿着底部包装E时,它唯一能去的地方是B下面,C的右边,D的左边。在
由于包装器沿一个侧面分配所有空间的特性,当所有部件都放在同一个轴上时,打包机的工作效果最好—无论是垂直还是水平堆叠。当您想像使用C和D那样切换轴时,通常最好将它们放在单独的框架中。在这个框架中,你可以从左到右放置小部件,但是框架可以像其他小部件一样保持在从上到下的轴上。在
注意:这就是代码中实际发生的情况:E被压缩在C和{}之间。由于各种原因它是不可见的,但是如果你给它一个明确的大小和颜色,它就会出现。在
了解更多信息