传统知识,理解包装和扩大空间

时间:2015-07-08 21:20:45

标签: python tkinter tk

我有一个可调整大小的窗口,我想要有两个带有滚动条的列表框,可以展开以填充所有可用空间。

当我只有一个列表框打包为fill=both, expand=1, side=left而一个滚动条打包为fill=Y, expand=0, side=right时,它将仅水平展开,即使它设置为填充两个方向。当我调整窗口大小时,列表框只会填充两侧。窗口的底部仍然是空的。

enter image description here

然后我继续添加另一个列表框。现在我没有把右边的滚动条打包,而是将所有东西都打包到左边,所以它们堆叠起来。列表框继续有fill=both, expand=1。现在当我调整窗口大小时,两个列表框只能垂直填充!水平空间仍然是空的。

enter image description here

发生了什么事?为什么它会忽略垂直空间,其中一个元素左侧包含,另一个元素右侧?为什么当所有东西都堆放在一起时它拒绝水平填充?

事实上,一旦它填满了垂直或水平空间,我就会相信父框架正在扩张......或者我应该更多地调查它?

2 个答案:

答案 0 :(得分:2)

如果没有看到您的实际代码,就无法知道您做错了什么。这是一个证明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()

答案 1 :(得分:0)

我正在使用的解决方法(如果不是正确的方式,请使用downvote)

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

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

仍然不确定包管理器在没有扩展的滚动条时不会展开列表框...