python
  • tkinter
  • label
  • frame
  • 2012-07-10 87 views 3 likes 
    3

    我创建了一个固定大小的框架,现在我想添加一些标签和其他小部件。但我观察到,只要我在这个框架上添加新的小部件,它的属性就不会被遵守,即大小和默认的背景颜色集不被遵守。将标签添加到Tkinter中的框架忽略框架的属性

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

    回答

    3

    你是正确的宽度和高度没有被尊重,但不是关于背景颜色。背景颜色不受影响,但由于背景恰好贴在标签的周围,因此看不到背景。如果您在打包时将标签添加到标签,则会看到背景。

    至于宽度和高度......这是Tkinter的一大特色之一。默认情况下,容器小部件展开或折叠得足以容纳其内容。因此,当您拨打pack时,会导致画面缩小。这个特征被称为几何传播

    对于浩浩荡荡的大部分应用程序,这是你想要的行为。对于那些罕见的情况,当你想明确设置一个容器的大小时,你可以关闭这个功能。要关闭它,请调用容器上的pack_propagategrid_propagate(取决于您在该容器上使用网格还是包装),并将其值设为False

    使用你的代码作为一个例子,你会怎么做:

    page1.pack_propagate(False) 
    

    我的建议是这样做,而是学习如何与几何传播工作。当用户调整窗口大小时,它会让你的GUI表现得更好,而且你不会花时间去计算窗口的正确大小。让Tkinter为你做。

    +1

    感谢您的解释,这就是我一直在寻找的。回顾你的推荐,我这样做的目的是为了设计一个widget应用程序。所以我虽然我可以使用框架来达到这个目的,这样当我去到下一页时,向导的大小仍然保持不变。 – sarbjit 2012-07-11 12:21:32

    +0

    @sarbjit:你可以通过使用'wm_geometry'给它一个明确的大小来保持向导的大小不变。当你这样做时,它迫使最外面的窗口保持它的大小,并且内部框架将扩展以适应窗口。 – 2012-07-11 12:30:22

     相关问题

    • 暂无相关问题^_^