Tkinter 框架未填充剩余 Space

Tkinter Frame Doesn't Fill Remaining Space

这是我第一次接触 Tkinter,为此我正在用头撞墙。

最终,我想要一个沿左边缘使用包含一堆按钮(导航)的框架的布局。这应该硬连线到 100 像素宽并占据所有垂直 space。 window 的其余部分应填充内容框架,我将动态更改其内容。

所以,应该很简单。这是我所拥有的简化版本(颜色编码以供参考):

from Tkinter import *

root = Tk()
root.geometry("300x200")

navbar = Frame(root, bg="green", width=100)
navbar.pack(anchor=W, fill=Y, expand=True, side=LEFT)

content_frame = Frame(root, bg="orange")
content_frame.pack(anchor=N, fill=BOTH, expand=True, side=LEFT )

root.mainloop()

我希望看到的是 window(全高)左侧的绿色条(100 像素宽),以及 window 橙色的其余部分。然而,我得到的是爱尔兰国旗(绿色、白色、橙色)。

无论我做什么,橙色 content_frame 就是拒绝水平填充。似乎 Tk 已经将 window 精确地分成两半,将绿色导航栏放在左侧(如预期的那样),但只给橙色 content_frame 剩余 space 的一半。

我可以通过编码强制橙色填充 space,在本例中为 width=200,但是当 window 调整大小时这不会弯曲。另外,如果我不添加绿色导航栏,橙色 content_frame 会愉快地填满整个 window.

此示例代码显示了带有 anchor=N 的 content_frame,但我将它锚定在哪里并不重要。我是 side=LEFT 还是 side=RIGHT 也没关系。

我还发现,无论我如何调整绿色导航栏的宽度,Tk 总是将剩余的水平 space 分成两半,并将橙色 content_frame 放在右半部分。

这一定很简单。有什么想法吗?

为左框架指定expand=False

from Tkinter import *

root = Tk()
root.geometry("300x200")

navbar = Frame(root, bg="green", width=100)
navbar.pack(anchor=W, fill=Y, expand=False, side=LEFT)  # <----

content_frame = Frame(root, bg="orange")
content_frame.pack(anchor=N, fill=BOTH, expand=True, side=LEFT )

root.mainloop()