在Tkinter中向frame添加标签会忽略frame的属性

时间:2012-07-10 12:36:02

标签: python tkinter label frame

我创建了一个固定大小的框架,现在我想在其上添加一些标签和其他小部件。但我观察到,一旦我在这个框架上添加新的小部件,它的属性就不受尊重,即大小和默认的背景颜色集不受尊重。

from Tkinter import *
tk = Tk()
page1 = Frame(tk, bg="blue", width=100, height=200)
l1 = Label(page1, text='This is label 1')
page1.pack()
l1.pack()
tk.mainloop()

所以在上面的例子中,如果我评论第4行& 6,然后我可以看到一个固定大小的框架与蓝色背景颜色。我的要求是我想用这种颜色在这个框架上添加一些其他的小部件。

1 个答案:

答案 0 :(得分:3)

您对未被尊重的宽度和高度是正确的,但与背景颜色无关。背景颜色不受影响,但您无法看到背景,因为背景恰好适合标签。如果在打包时向标签添加填充,您将看到背景。

关于宽度和高度......这是Tkinter的一大特色。默认情况下,容器窗口小部件会扩展或折叠,以便足以容纳其内容。因此,当您调用pack时,会导致帧缩小。此功能称为几何传播

对于浩大的大多数应用程序,这是您想要的行为。对于那些您想要明确设置容器大小的罕见情况,您可以关闭此功能。要关闭它,请调用容器上的pack_propagategrid_propagate(取决于您是否在该容器上使用网格或包),并为其赋值False

以您的代码为例,您可以:

page1.pack_propagate(False)

我的建议是不这样做,而是学习如何使用几何体传播。当用户调整窗口大小时,它将使您的GUI表现更好,并且您不会花时间尝试计算窗口的正确大小。让Tkinter为您做到这一点。

相关问题