2016-10-29 2 views
0

2つのフレームが1つの列にあります。上部のフレームにはxと記入し、yに固定します。これはうまくいく。下枠は残りのスペースを埋めるはずですが、fillbothに、expandTrueに設定しても、予想通りに動作していないようです。下部のフレームは展開されますが、完全には展開されず、フレーム間のルートの灰色の背景が残ります。ここで2番目のフレームが両方とも塗りつぶされ、完全に展開されずに真っしく展開されます

は、問題を再現する最小限のコードです:

import Tkinter as tk 

if __name__ == "__main__": 
    root = tk.Tk() 

    top_frame = tk.Frame(root, height=50, bg="blue") 
    top_frame.pack(anchor="n", fill="x", expand=True) 

    bot_frame = tk.Frame(root, bg="red") 
    bot_frame.pack(anchor="n", fill="both", expand=True) 

    root.mainloop() 

理想的には、下のフレームはまた、最小サイズで開始する必要がありますが、私はおそらく、この問題が解決されるとそれを把握することができるようになります。

答えて

1

expandfillは、互いに完全に独立しています。 expandは「余分なスペースを得ますか?」という質問に答え、fillは「私に与えられた余分なスペースをどのように使うのですか?

したがって、両方ともexpand=Trueの2つのフレームがあります。これは、tkinterが余分なスペースの半分を1つのフレームに、残りの半分を余分なスペースに割り当てることを意味します。

トップフレームはX方向にのみ塗りつぶすので、Y方向に余分なスペースは使用されません。そのため、フレームの定義された高さの下に灰色で表示されます。

この特定の問題の解決方法は、余分なスペースを与えたくないため、上部フレームにはexpandをfalseにすることです。

+0

ありがとうございます! 'fill'と' expand'の他の説明は、その違いを理解するのに本当に役に立たなかった。この回答は、明確かつ簡潔に説明しています。 –

2

最初のフレームからexpand=Trueを削除すると、pack()にこのウィジェットでも余分な空き領域を使用するように通知されます。

import Tkinter as tk 

if __name__ == "__main__": 
    root = tk.Tk() 

    top_frame = tk.Frame(root, height=50, bg="blue") 
    top_frame.pack(anchor="n", fill="x") # without expand=True 

    bot_frame = tk.Frame(root, bg="red") 
    bot_frame.pack(anchor="n", fill="both", expand=True) 

    root.mainloop() 
関連する問題