48

这是给我带来麻烦的代码。

f = Frame(root, width=1000, bg="blue")
f.pack(fill=X, expand=True)

l = Label(f, text="hi", width=10, bg="red", fg="white")
l.pack()

如果我用标签注释掉这些行,则框架以正确的宽度显示。但是,添加标签似乎会将框架缩小到标签的大小。有没有办法防止这种情况发生?

4

1 回答 1

73

默认情况下,pack缩小grid或放大小部件以适应其内容,这在 99.9% 的情况下都是您想要的。描述此功能的术语是几何传播pack使用( pack_propagate) 和grid( )时,有一个命令可以打开或关闭几何传播grid_propagate

由于您使用pack的语法是:

f.pack_propagate(0)

或者root.pack_propagate(0),取决于您实际想要影响的小部件。但是,由于您没有给出框架高度,它的默认高度是 1 个像素,因此您仍然可能看不到内部小部件。为了获得你想要的全部效果,你需要给包含框架一个宽度和一个高度。

话虽如此,绝大多数时候你应该让 Tkinter 计算大小。当您关闭几何传播时,您的 GUI 将无法很好地响应分辨率的变化、字体的变化等。Tkinter 的几何管理器(packplacegrid非常强大。你应该学会通过使用正确的工具来利用这种力量。

于 2009-02-19T19:42:43.647 回答