Tkinter框架不会填充剩余空间

时间:2015-02-13 05:31:55

标签: python tkinter tk

这是我与Tkinter的第一次相遇,而且我正在撞墙挡住我的头。

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

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

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()

我希望看到的是窗户左侧的绿色条(100 px宽)(全高),窗户的其余部分为橙色。然而,我得到的是爱尔兰国旗(绿色,白色,橙色)。

无论我做什么,橙色content_frame都拒绝水平填充。似乎Tk将窗口分成两半,将绿色导航栏放在左侧(如预期的那样),但是给予橙色content_frame只留下剩余空间的一半。

我可以强制橙色通过编码来填充空间,在这种情况下宽度= 200,但是当窗口调整大小时这不会弯曲。此外,如果我不添加绿色导航栏,橙色content_frame会愉快地填充整个窗口。

此示例代码显示了具有anchor = N的content_frame,但是我锚定它的位置并不重要。无论我是左边还是边=右边都没关系。

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

这必须简单。有什么想法吗?

1 个答案:

答案 0 :(得分:5)

为左框架指定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()