2012-04-22 10 views
0

次のコードで赤いフレームが表示されないのはなぜですか?Tkinterフレームコンテナの色が表示されない

import Tkinter 

root = Tkinter.Tk() 
root.geometry("220x300") 

container_frame = Tkinter.Frame(background = "red", width = 100, height = 120) 
container_frame.pack() 

widget_button = Tkinter.Button(master = container_frame) 
widget_button.pack() 

root.mainloop() 
+0

は、rootにcontainer_frameのマスターを設定する必要があります... –

+0

は不思議この」doesnの何かを変える。 – Bentley4

答えて

5

フレームがサイズ変更されたことがわかりますあなたはボタンとフレームの間に余白がないので、それを見ないでください。デフォルトでは、コンテナーはコンテナーの周りに「収縮するように」収縮します。明示的な幅や高さをフレームに追加しても、その子に合わせて縮小されます。

あなたが探している効果を達成するにはいくつかの方法がありますが、あなたが望む効果がはっきりしていません。この「縮みに合わせる」振る舞いをオフにすることができます(container_frame.pack_propagate(False)を使用)。または、ウィジェットの周囲にパディングを追加することもできます。または、フレームのコンテナに背景を適用することもできます。または、コンテナ(メインウィンドウ)を塗りつぶすようにフレームをパックし、ウィンドウがフレームを公開するのに十分な大きさであることを確認します。

その最後の提案の例については、あなたはこのように1行を変更することができます。私の頭の上から

container_frame.pack(side="top", fill="both", expand=True) 
+0

ありがとうございます!あなたは "または、あなたはフレームのコンテナに背景を適用することができます"と述べた。私は 'root = Tkinter.Tk(background =" red ")'を試しました。それはうまくいかなかった、どうすればいい?私は 'frame_container.overriderderict()'もやった。これによりAttributeErrorが生成されました。 – Bentley4

+1

@ Bentley4:答えを投稿したときに私が何を考えているのか分かりません。私はあなたを完全に誤解しています。あなたは 'overrideredirect'を望まないので、' pack_propagate'が必要です。混乱させて申し訳ありません;私は私の答えを更新しました。 –

+0

恐ろしい、thnx !! – Bentley4

0

あなたが変更した場合:

widget_button.pack(padx=10, pady=10) 

あなたは「あなたはドンときコールwidget_button.pack(...)

enter image description here

+0

申し訳ありませんが、これはボタンにパディングを提供するだけで、質問には答えません。私はFrameがデフォルトで、インスタンス化の引数として 'container_frame'を呼び出すウィジェットのサイズにリサイズすることを知っています。しかし、この動作を無効にするには、 'width = 100'と' height = 120'というオプションを渡しました。ですから、私は 'container_frame'を取得してこのサイズを取得し、色を付けることでそれを見たいと思います。 – Bentley4

関連する問題