2017-07-13 6 views
0

私のコードは次のとおりです:python tkinterを使用しているときにフレームのサイズが変更されるのはなぜですか?

import tkinter as tk 

#setting up window. 
root = tk.Tk() 
root.title("CSV Maker") 
root.geometry("600x300") 

#setting up frames. 
leftFrame = tk.Frame(root, bg="red", width=300, height=300) 
rightFrame = tk.Frame(root, bg="blue", width=300, height=300) 
#placing frames on window. 
leftFrame.grid(row=0, column=0) 
rightFrame.grid(row=0, column=1) 

#setting up labels. 
inputPathLabel = tk.Label(leftFrame, text="Input File Path:") 

#placing labels on frames. 
inputPathLabel.grid(row=0, column=0) 
root.mainloop() 

私は次の取得ラベル削除する場合:しかし、それは(ラベル付き)以下であると、私は、コードを離れるとき

Without label

を、私は全く異なる結果になる。フレームが選択したサイズとは別のサイズにリサイズされ、色が消えたようです。どうしてこれなの? Tkinterには動作するように設計された方法を単純に

With label

答えて

1

packまたはgridを使用すると、フレーム(または他のウィジェット)が縮小または拡大され、すべてのコンテンツに収まるようになります。

時間の99.9%は、これが望ましい動作です。 Tkinterは、GUIを適切なサイズにすることができます。

gridための公式ドキュメントから:

グリッドジオメトリマネージャは、通常、マスターはちょうど正確にその奴隷のニーズを満たすためにでなければなりませんどのように大規模計算し、それがマスターの要求された幅と高さを設定しますこれらの次元にこれにより、ジオメトリ情報がウィンドウ階層を経由して最上位のウィンドウに伝播され、サブツリー全体がリーフウィンドウのニーズに合わせてサイズ変更されます。しかしながら、グリッド伝搬コマンドは、1つまたは複数のマスタの伝搬をオフにするために使用されてもよい。伝播が無効の場合、グリッドは要求されたマスターウィンドウの幅と高さを設定しません。これは、たとえば、マスターウィンドウが指定した固定サイズを持つことを望む場合に便利です。 packのドキュメントから

パッカーは、通常、マスターはちょうど正確にその奴隷のニーズを満たすためにでなければなりませんどのように大規模計算し、それがマスターの要求された幅と高さを設定しますこれらの次元。これにより、ジオメトリ情報がウィンドウ階層を経由して最上位のウィンドウに伝播され、サブツリー全体がリーフウィンドウのニーズに合わせてサイズ変更されます。しかし、pack propagateコマンドを使用して、1つまたは複数のマスターの伝播をオフにすることができます。伝播が無効の場合、パッカーは要求されたパッカーの幅と高さを設定しません。これは、たとえば、マスターウィンドウが指定した固定サイズを持つことを望む場合に便利です。

placeには同じ動作がありません。 placeドキュメントから:

プレーサーは、マスターウィンドウの形状またはスレーブ・ウィンドウの親を(操作しようとする試みを行いません(例えばパッカーなど)、他の多くの幾何学のマネージャーとは異なり、すなわち、それは設定しません。その要求されたサイズ)。これらのウィンドウのサイズを制御するには、この目的のための構成オプションを提供するフレームとキャンバスのようなウィンドウを作成します。

+0

背景色がどのようになっていますか?そして、ラベル/ボタン/サイズが指定されたフレームサイズをオーバーライドしていると言っていますか? – Joel

+0

@Joel:それはラベルの後ろにあります。それを見るためにいくつかのパディングを追加してください(例えば: 'inputPathLabel。グリッド(行= 0、列= 0、パッドx = 20、パッド= 20) ') –

+0

あなたは非常に助けになりました。ありがとう。 – Joel

関連する問題