这是给我带来麻烦的代码。
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()
如果我用Label标注出行,则Frame会以正确的宽度显示。但是,添加Label似乎会将Frame缩小到Label的大小。有没有办法防止这种情况发生?
答案 0 :(得分:51)
默认情况下,tk frames 缩小或增长以适应其内容,这是您想要的99%的时间。描述此特征的术语是“几何传播”。使用pack
(以及grid
f.pack_propagate(0)
)时,有command可以打开或关闭几何体传播。
由于您使用的是pack,语法为:
root.pack_propagate(0)
或者pack
,具体取决于您实际想要影响的小部件。但是,由于您没有给出框架高度,因此它的默认高度为1像素,因此您仍然可能看不到内部窗口小部件。为了获得您想要的效果,您需要为包含框架提供宽度和高度。
话虽这么说,绝大多数时候你应该让tkinter计算大小。当您关闭几何体传播时,GUI将无法很好地响应分辨率的变化,字体的变化等.tkinter的几何管理器(place
,grid
和{{1}})非常强大。学会利用这种力量。