私は Tcl/Tk に比較的慣れていませんが、ここ数週間ノンストップで、かなり成功裏に作業を進めてきました。ほとんどの場合、それはかなり簡単に思えます。しかし、最近問題が発生しました。これはおそらく単純ですが、理解できないようです。
問題を示すために、かなり複雑なコードを数行に減らしました。
私の単純な例では、それぞれに単純なラベル ウィジェットを持つ 2 つのラベルフレームを生成します。メイン ウィンドウのサイズを変更 (つまり、展開) するとき、「左」のフレームは y 方向のみにサイズ変更し、「中央」のフレームは x と y 方向にサイズ変更します。それらの部品は正常に機能します。
ただし、サイズを変更したときにフレームが互いに「スタック」したままになることも望んでいます。つまり、両方のサイズが変更されたときに、「中央」のフレームが「左」のフレームに対してくっついたままになるようにします。代わりに、両者の間にギャップが拡大しているのが見えます。
繰り返しますが、これはより複雑なプログラムからの単純化されたコードです。同じプログラムで grid と pack コマンドを混在させないようにしていますが、元のより複雑なプログラムでは、 grid の使用が非常に扱いにくくなりました。したがって、「pack」を使用したソリューションが優先されます。しかし、適切な説明は良い出発点です。
私の小さな例:
#!/usr/bin/wish
## Set up two main frames
set frameLeft [labelframe .frameLeft]
set frameMiddle [labelframe .frameMiddle]
pack $frameLeft -fill y -expand 1
pack $frameMiddle -fill both -expand 1
pack $frameLeft $frameMiddle -side left -anchor nw
## Instead of the previous 3 lines, I also tried:
#pack $frameLeft -fill y -expand 1 -side left -anchor nw
#pack $frameMiddle -fill both -expand 1 -side left -anchor nw
## Set up component in LEFT frame
set frameOne [labelframe $frameLeft.frameOne]
set labelOne [label $frameOne.labelOne -text "Label One:"]
pack $labelOne -anchor nw
pack $frameOne -anchor nw
## Set up component in MIDDLE frame
set frameTwo [labelframe $frameMiddle.frameTwo]
set labelTwo [label $frameTwo.labelTwo -text "Label Two:"]
pack $labelTwo -side left
pack $frameTwo -anchor nw