【问题标题】:Adding label to frame in Tkinter ignores the attributes of frame在 Tkinter 中为框架添加标签会忽略框架的属性
【发布时间】:2012-07-10 21:18:09
【问题描述】:

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

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

【问题讨论】:

    标签: python tkinter label frame


    【解决方案1】:

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

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

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

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

    page1.pack_propagate(False)
    

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

    【讨论】:

    • 感谢您的解释,这就是我想要的。回顾您的建议,我这样做的目的是设计一个小部件应用程序。所以我虽然可以为此目的使用框架,这样当我转到下一页时,向导大小保持不变。
    • @sarbjit:您可以通过使用wm_geometry 给它一个明确的大小来阻止向导调整大小。当你这样做时,它会强制最外面的窗口保持它的大小,并且内部框架将扩展以适应窗口。
    猜你喜欢
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2014-03-29
    • 2016-08-14
    • 2018-09-23
    • 2013-01-22
    相关资源
    最近更新 更多