4

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

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 行,那么我可以看到一个固定大小的框架,带有蓝色背景色。我的要求是我想用这种颜色在这个框架上添加一些其他小部件。

4

1 回答 1

3

你对宽度和高度没有被尊重是正确的,但对于背景颜色却不是。背景颜色不受影响,但您看不到背景,因为背景正好适合标签周围。如果您在打包时为标签添加填充,您将看到背景。

至于宽度和高度……这是 Tkinter 的一大特色。默认情况下,容器小部件会展开或折叠到刚好足以容纳其内容。因此,当您调用 时pack,它会导致框架缩小。此功能称为几何传播

对于绝大多数应用程序,这是您想要的行为。在极少数情况下,当您想明确设置容器的大小时,您可以关闭此功能。要关闭它,请在容器上调用pack_propagate或调用grid_propagate(取决于您是在该容器上使用 grid 还是 pack),并为其赋予False.

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

page1.pack_propagate(False)

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

于 2012-07-10T13:18:09.790 回答