【问题标题】:Tkinter Frame Doesn't Fill Remaining SpaceTkinter 帧不填充剩余空间
【发布时间】: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

标签: python tkinter tk


【解决方案1】:

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

【讨论】:

  • 太棒了!完美运行。不完全确定为什么会这样,但确实如此。至少它向我展示了我需要在哪里阅读以了解原因。谢谢!
  • 不适用于另一个示例。没有解释:(请你能补充一下原因吗?
  • @sol,我不明白你的意思。您最好发布一个单独的问题以获得更高的答案机会。
猜你喜欢
  • 2021-10-29
  • 2018-11-11
  • 1970-01-01
  • 2021-02-06
  • 2013-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 1970-01-01
相关资源
最近更新 更多