web-dev-qa-db-ja.com

Tkinter Frameが内容に合わせて縮小するのを止める方法は?

これは私に問題を与えているコードです。

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()

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

38
Johnston

デフォルトでは、tkフレームはコンテンツに合わせて縮小または拡大します。この機能を説明する用語は「ジオメトリの伝播」です。 packを使用するときにジオメトリの伝播をオンまたはオフにする command があります(およびgridに対して 同様の )。

Packを使用しているため、構文は次のようになります。

_f.pack_propagate(0)
_

またはroot.pack_propagate(0)は、実際にどのウィジェットに影響を与えたいかに応じて異なります。ただし、フレームの高さを指定していないため、デフォルトの高さは1ピクセルなので、内部ウィジェットは表示されない場合があります。必要なものを最大限に活用するには、包含フレームに幅と高さの両方を指定する必要があります。

そうは言っても、ほとんどの場合、tkinterにサイズを計算させる必要があります。ジオメトリの伝播をオフにすると、GUIが解像度の変更やフォントの変更などにうまく応答しなくなります。tkinterのジオメトリマネージャ(packplacegrid)は非常に強力です。その力を活用することを学びます。

53
Bryan Oakley