我的列中有2个帧。顶部框架应填充x
并固定y
。这很好用。底部框架应该填充剩余的空间,但将fill
设置为both
而将expand
设置为True
似乎并不像我预期的那样工作。底部框架扩展,但不完全,在框架之间留下根的灰色背景。
以下是重现问题的最低代码:
import Tkinter as tk
if __name__ == "__main__":
root = tk.Tk()
top_frame = tk.Frame(root, height=50, bg="blue")
top_frame.pack(anchor="n", fill="x", expand=True)
bot_frame = tk.Frame(root, bg="red")
bot_frame.pack(anchor="n", fill="both", expand=True)
root.mainloop()
理想情况下,底部框架也应该以最小尺寸开始,但是一旦解决了这个问题,我可能会想出来。
答案 0 :(得分:2)
从第一帧中删除expand=True
,因为它会通知pack()
使用此小部件的额外可用空间。
import Tkinter as tk
if __name__ == "__main__":
root = tk.Tk()
top_frame = tk.Frame(root, height=50, bg="blue")
top_frame.pack(anchor="n", fill="x") # without expand=True
bot_frame = tk.Frame(root, bg="red")
bot_frame.pack(anchor="n", fill="both", expand=True)
root.mainloop()
答案 1 :(得分:1)
expand
和fill
完全相互独立。 expand
回答了问题"我是否获得了额外的空间?"和fill
回答问题"如何使用提供给我的额外空间?& #34;
所以,你有两个框架都有expand=True
。这意味着,无论这些小部件如何计划使用额外的空间,tkinter将为一个帧提供一半额外空间,将额外空间的一半提供给另一个空间。
由于顶部框架仅填充X方向,因此在Y方向上给出的额外空间未使用。这就是为什么它在框架的定义高度下方显示为灰色。
此特定问题的解决方案是让顶部框架的expand
为false,因为您不希望给它额外的空间。