48

これは私に問題を引き起こしているコードです。

f = Frame(root, width=1000, bg="blue")
f.pack(fill=X, expand=True)

l = Label(f, text="hi", width=10, bg="red", fg="white")
l.pack()

ラベルの行をコメントアウトすると、フレームは正しい幅で表示されます。ただし、ラベルを追加すると、フレームがラベルのサイズに縮小されるようです。それが起こらないようにする方法はありますか?

4

1 に答える 1

73

デフォルトでは、ウィジェットの内容に合わせてウィジェットpackgrid縮小または拡大します。これは、99.9%の確率で必要なことです。この機能を説明する用語は、ジオメトリの伝播です。packpack_propagate)とgrid( )を使用するときに、ジオメトリの伝播をオンまたはオフにするコマンドがありgrid_propagateます。

pack構文を使用しているので、次のようになります。

f.pack_propagate(0)

root.pack_propagate(0)または、実際に影響を与えたいウィジェットに応じて、多分。ただし、フレームの高さを指定していないため、デフォルトの高さは1ピクセルであるため、内部ウィジェットが表示されない場合があります。あなたが望むものの完全な効果を得るために、あなたはそれを含むフレームに幅と高さの両方を与える必要があります。

そうは言っても、ほとんどの場合、Tkinterにサイズを計算させる必要があります。ジオメトリの伝播をオフにすると、GUIは解像度の変更やフォントの変更などにうまく反応しなくなります。Tkinterのジオメトリマネージャ(、、packおよびplacegridは非常に強力です。あなたは仕事に適切なツールを使用することによってその力を利用することを学ぶべきです。

于 2009-02-19T19:42:43.647 に答える