第二帧填充并扩展为true而不是完全展开

时间:2016-10-29 21:28:40

标签: python tkinter

我的列中有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()

理想情况下,底部框架也应该以最小尺寸开始,但是一旦解决了这个问题,我可能会想出来。

2 个答案:

答案 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)

expandfill完全相互独立。 expand回答了问题"我是否获得了额外的空间?"和fill回答问题"如何使用提供给我的额外空间?& #34;

所以,你有两个框架都有expand=True。这意味着,无论这些小部件如何计划使用额外的空间,tkinter将为一个帧提供一半额外空间,将额外空间的一半提供给另一个空间。

由于顶部框架仅填充X方向,因此在Y方向上给出的额外空间未使用。这就是为什么它在框架的定义高度下方显示为灰色。

此特定问题的解决方案是让顶部框架的expand为false,因为您不希望给它额外的空间。