【发布时间】:2015-04-14 02:40:48
【问题描述】:
这是我与 Tkinter 的第一次相遇,为此我正用头撞墙。
最终,我想要一个布局,该布局沿左边缘使用一个框架,其中包含一堆按钮(导航)。这应该硬连线到 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 像素宽),窗口的其余部分为橙色。然而,我得到的是爱尔兰国旗(绿色、白色、橙色)。
无论我做什么,橙色的 content_frame 都拒绝水平填充。似乎 Tk 已将窗口精确地分成两半,将绿色导航栏放在左侧(如预期的那样),但只给橙色 content_frame 剩余空间的一半。
我可以通过编码强制橙色填充空间,在本例中为 width=200,但是当窗口调整大小时这不会弯曲。另外,如果我不添加绿色导航栏,橙色的 content_frame 会愉快地填满整个窗口。
此示例代码显示了 anchor=N 的 content_frame,但我将其锚定在哪里并不重要。我是side=LEFT还是side=RIGHT也没关系。
我还发现,无论我如何调整绿色导航栏的宽度,Tk 总是将剩余的水平空间一分为二,并将橙色的 content_frame 放在右半部分。
这必须很简单。有什么想法吗?
【问题讨论】:
-
我运行了你的代码,它似乎工作正常。 screenshoit。您能否发布您的屏幕截图,以便我们知道它不起作用。
-
我不小心将硬编码的 width=200 留在了 content_frame 中。这使它看起来可以正常工作,直到您调整窗口大小并看到它没有弯曲,但仍然硬编码为 200 px 宽。我编辑了代码以更好地说明问题。这是我看到的:link