2017-09-13 16 views
1

列の重みが等しいため、下のコードが生成するテキスト領域が画面の半分を占めると予想されます。Tkinkerグリッドの重みが期待通りに動作しない

なぜテキスト領域が画面の約2/3を占めるのですか。テキスト領域が画面の半分だけを占めるのはなぜですか。

from tkinter import * 

root = Tk() 
root.wm_state('zoomed') 
root.columnconfigure(0, weight=1) 
root.columnconfigure(1, weight=1) 
root.rowconfigure(0, weight=1) 

root.configure(bg='red') 

info_frame = Frame(root) 
info_frame.grid(row=0, column=1, sticky="nsew") 
info_frame.columnconfigure(0, weight=1) 
info_frame.rowconfigure(0, weight=1) 

user_frame = Frame(root, bg='blue') 
user_frame.grid(row=0, column=0, sticky="nsew") 
user_frame.columnconfigure(0, weight=1) 
user_frame.rowconfigure(0, weight=1) 
user_frame.rowconfigure(1, weight=1) 

button_frame = Frame(user_frame) 
button_frame.grid(row=0, column=0, sticky="nsew") 

entry_frame = Frame(user_frame) 
entry_frame.grid(row=1, column=0, sticky="nsew") 

info_display = Text(info_frame, state=DISABLED) 
info_display.grid(row=0, column=0, sticky="nsew") 

scrollbar = Scrollbar(info_frame) 
scrollbar.grid(row=0, column=1, sticky="nsew") 

light_label = Label(entry_frame, text='Light').grid(row=0, column=0) 
light_entry = Entry(entry_frame).grid(row=0, column=1) 
current_label = Label(entry_frame, text='Current').grid(row=1, column=0) 
current_entry = Entry(entry_frame).grid(row=1, column=1) 

button1 = Button(button_frame, text='button1').grid(row=0, column=0) 
button2 = Button(button_frame, text='button2').grid(row=0, column=1) 
button3 = Button(button_frame, text='button3').grid(row=1, column=0) 
button4 = Button(button_frame, text='button4').grid(row=1, column=1) 


root.mainloop() 

答えて

3

重量は余分スペースを割り当てる方法のTkinter伝え、それが列または行が同じサイズを持っていることを保証するためのメカニズムではありません。

列0に100ピクセル幅のウィジェットを配置し、列1に幅200ピクセルのウィジェットを配置し、両方の列に同じ重みを付けるとします。 GUIは自然に300ピクセル幅にしようとします、なぜならそれはあなたが要求したものですからです。

あなたは(対話型サイズ変更によって、geometry方法を用いることにより、またはウィンドウをズームすることによってのいずれか)窓を大きくした場合は、Tkinterには余分領域を割り当てる方法を決定するために重量を使用します。

たとえば、GUIの幅を500ピクセルにすると、割り当てられていないピクセルが200個あります。各列の重みが同じであれば、100ピクセルが各列に移動し、1つの列が200ピクセルになり、もう1列が300になります。したがって、同じ重みを持っていても同じサイズはありません。

列の幅を同じにする場合は、uniformオプションを使用して列を均一なグループにすることができます。そのグループ内では、すべての列の幅が同じになります。

例えば、これは、各列が半分のスペースを占有することを保証します(存在量を持つ2つの列のみであることのおかげで、彼らは定義によって、彼らは半分のウィンドウを取る必要があり、同じサイズです)

root.columnconfigure(0, weight=1, uniform="half") 
root.columnconfigure(1, weight=1, uniform="half") 

注:"half"の代わりに任意の文字列を使用できます。唯一の基準は、同じ値を持つすべての列の幅が同じになることです。

0

グリッド重みは、余分なスペースを分配します。 referenceを参照してください。列を作るか、または伸縮行に

量は、このオプションを使用すると は、余分なスペースを分配するときに、この列または行 の相対的な重みを与える値を供給する。

w.columnconfigure(0, weight=3) 
w.columnconfigure(1, weight=1) 

デフォルトサイズ:ウィジェットwは グリッドレイアウトが含まれている場合、例えば、これらのラインは、第二のカラムに最初の列と1/4に余分 空間の4分の3を配布しますテキストウィジェットのデフォルトのサイズよりもはるかに大きいです。より均等な列が必要な場合は、他の要素を大きくしてテキストを縮小する必要があります。

関連する問題