TK、理解包和扩展space

TK, understanding pack and expanding space

我有一个可调整大小的 window,我希望有两个带有滚动条的列表框,滚动条可以展开以填充所有可用的 space。

当我只有一个列表框 fill=both, expand=1, side=left 和一个滚动条 fill=Y, expand=0, side=right 时,它只会水平扩展,即使它被设置为填充两个方向。当我调整 window 的大小时,列表框只填充两侧。 window 的底部保持空白。

然后我继续添加另一个列表框。现在,我不再将滚动条打包在右侧,而是将所有内容都打包到左侧,这样它们就会堆叠起来。列表框继续有 fill=both, expand=1。现在,当我调整 window 的大小时,两个列表框都只能垂直填充!水平 space 保持为空。

这是怎么回事?为什么它会忽略垂直 space 元素,其中一个元素向左打包,另一个向右打包?以及为什么当所有东西都向左堆叠时它拒绝水平填充?

一旦它填满垂直或水平 space 的事实让我相信父框架扩展得很好......或者我是否应该对此进行更多调查?

我正在使用的解决方法(如果不是正确的 tk 方式,请投反对票)

我创建了两个框架,都是side=LEFT, expand=1, fill=BOTH,然后将每对列表框+滚动条放在那里。现在一切 expands/fills 都很好。

以前列表框在黄色框架中。我刚刚创建的是蓝色和绿色。

仍然不确定包管理器是否会在列表框之间有滚动条而没有展开时展开列表框...

如果没有看到您的实际代码,就不可能知道您做错了什么。这里有一个例子来证明 pack 像记录的那样工作:

import Tkinter as tk

root = tk.Tk()
lb1 = tk.Listbox(root)
lb2 = tk.Listbox(root)
vsb1 = tk.Scrollbar(root, orient="vertical", command=lb1.yview)
vsb2 = tk.Scrollbar(root, orient="vertical", command=lb2.yview)
lb1.configure(yscrollcommand=vsb1.set)
lb2.configure(yscrollcommand=vsb2.set)

lb1.pack(side="left", fill="both", expand=True)
vsb1.pack(side="left", fill="y", expand=False)
lb2.pack(side="left", fill="both", expand=True)
vsb2.pack(side="left", fill="y", expand=False)

root.mainloop()