-1

こんにちは、ウィジェットがあってもウィジェットの幅と高さを変更する方法はありますか? 私はこのようなコードを持っています

  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() を使用してからフレームのサイズを変更することはできません)

4

1 に答える 1

1

を使用しているためplace、2 つの解決策があります。place を使用して幅と高さをゼロに設定するか、ジオメトリの伝播をオフにすることができます。

place を使用して幅と高さを設定する

place を使用すると、配置されたウィジェットの幅と高さを定義できるため、click関数でこれを行うことができます。

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

ジオメトリの伝播をオフにする

フレームは、「ジオメトリの伝播」と呼ばれるものによって、コンテンツに合わせてサイズ変更されます。これをオフにすると、フレーム自体の幅と高さのオプションでフレームのサイズを制御できます。通常は、Tkinter にサイズを決定させる方が適切ですが、明示的なサイズが必要な場合があるため、ジオメトリの伝播をオフにすることができます。

を使用してフレーム内部のウィジェットを管理しているため、 を使用してそのフレームのジオメトリの伝播をオフにするgrid必要があります。grid_propagate(False)

frame.grid_propagate(False)

そうすることで、ウィジェットの初期の幅と高さを設定する責任がありますが、伝播をオンのままにして初期サイズを取得し、ボタンのクリックでオフにして、その問題を回避することができます。

幅と高さをゼロに設定すると、Tkinter がウィンドウを再描画しないという興味深いバグ (または機能...) があります。少なくとも、Mac にはありません。ウィジェットをゼロサイズに設定する必要はまったくないので、その回避策を思い出せませんが、1x1 ピクセルに設定するとほとんど見えなくなります。

于 2013-09-04T17:00:04.903 に答える