这是给我带来麻烦的代码。
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()
如果我用标签注释掉这些行,则框架以正确的宽度显示。但是,添加标签似乎会将框架缩小到标签的大小。有没有办法防止这种情况发生?
默认情况下,pack
缩小grid
或放大小部件以适应其内容,这在 99.9% 的情况下都是您想要的。描述此功能的术语是几何传播。pack
使用( pack_propagate
) 和grid
( )时,有一个命令可以打开或关闭几何传播grid_propagate
。
由于您使用pack
的语法是:
f.pack_propagate(0)
或者root.pack_propagate(0)
,取决于您实际想要影响的小部件。但是,由于您没有给出框架高度,它的默认高度是 1 个像素,因此您仍然可能看不到内部小部件。为了获得你想要的全部效果,你需要给包含框架一个宽度和一个高度。
话虽如此,绝大多数时候你应该让 Tkinter 计算大小。当您关闭几何传播时,您的 GUI 将无法很好地响应分辨率的变化、字体的变化等。Tkinter 的几何管理器(pack
和place
)grid
非常强大。你应该学会通过使用正确的工具来利用这种力量。