即使有小部件python,也要改变Frame的大小

时间:2013-09-04 10:09:43

标签: python tkinter frame

嗨有没有办法改变小部件的宽度和高度,即使有小部件? 我有这样的代码

  form = Tk()
  form.geometry("500x500")

  def click():
      global frame
      frame.config(height = 0 ,width =  0)


  frame = LabelFrame(form , text = "vaaja")
  frame.place(x = 20 , y = 30)
   Label(frame, text ="1").grid(row = 0,column = 0 )
   Label(frame, text =  "2").grid(row = 1 ,column = 0 )

   Button(form , text="Click", command = click).place(x = 200 ,  y = 200)

   form.mainloop()

当我单击按钮时,框架的大小是相同的(我不能使用grid_forget()作为标签,然后更改框架的大小)

1 个答案:

答案 0 :(得分:1)

因为您使用的是place,所以您有两种解决方案:您可以使用地点将宽度和高度设置为零,或者可以关闭几何体传播。

使用地点设置宽度和高度

place允许您定义放置小部件的宽度和高度,因此在click函数中,您可以执行此操作:

def click():
    frame.place_configure(width=0, height=0)

关闭几何体传播

调整框架的大小以适应其内容,称为“几何体传播”。如果将其关闭,则可以使用框架本身的宽度和高度选项控制框架的大小。通常最好让Tkinter为您决定尺寸,但有时需要有明确的尺寸,这就是为什么可以关闭几何传播的原因。

由于您使用grid来管理框架内部的小部件,因此您需要使用grid_propagate(False)关闭该框架的几何体传播:

frame.grid_propagate(False)

通过这样做,您负责设置窗口小部件的初始宽度和高度,尽管您可以保持传播以获得初始大小,然后通过单击按钮将其关闭以解决该问题。

有一个有趣的错误(或功能......),如果你将宽度和高度设置为零,Tkinter将不会重绘窗口。至少,它不在Mac上。我不记得这方面的解决方法,因为我从来不需要将小部件设置为零大小,但将其设置为1x1像素使其几乎不可见。