2011-10-18 11 views
4

代わりに隠されて表示されるフレームを作りたい。問題は、Tkがhide/unpackコマンドを提供していないことです。私はvtclを使用しており、最上位にウィンドウを隠すだけの "Window hode"オプションがあります。今私はフレームを隠し、後で同じフレームを再び表示したい。これは、1つのフレームをアンパックし、他のフレームを表示することと考えることができます。私のコードは次のようにすることができる:この手順でtcl tk guiのフレームを非表示にする

proc show1hide2 { } { 
    global i top 
    if {$i == 1} { 
     unpack $top.frame1 
     pack $top.frame2 
     set i 0 
    } else { 
     unpack $top.frame2 
     pack $top.frame1 
     set i 1 
    } 
} 

$top.frame1$top.frame2は、以前に充填し、$iの値は、$top.frame1従ってトグルされ、このPROCが呼び出されたとき$top.frame2が交互に示されています。すべて、私はそれが存在し、これを行うのを助けることができるunpackのようなコマンドがあることを知りたいですか?ちなみに、unpackは単なるアイデアです。

私はあなたが探しているものかもしれません パックはコマンドを忘れていると思い
+0

「スタックフレーム」を使用して、他のソリューションと 'raise'コマンドがあるようです(私はそれを試していませんまだ)。利点は、2つのフレームのサイズが異なり、レイアウトマネージャ(たとえば 'grid ')が使用されている場合、ウィンドウが縮小または拡大(サイズ変更)されないことです。http://stackoverflow.com/questions/19404439/python- tkinter-how-to-hide-the-ui –

答えて

8

proc toggle {} { 
    global state 
    if {$state == 1} { 
     pack forget .r 
     pack .g -side bottom -fill x 
     set state 0 
    } else { 
     pack forget .g 
     pack .r -side bottom -fill x 

     set state 1 
    } 
} 

set state 1 

# Make the widgets 
label .r -text "Red Widget" -bg red 
label .g -text "Green Widget" -bg green 
button .tog -text "Toggle" -command toggle 
# Lay them out 
pack .tog 
pack .r -side bottom -fill x 
+0

+1: 'pack info'を使うと、呼び出しの間にパックされたウィンドウを保存する情報を取得して、復元が適切に動作するようにすることができます。代わりに、 'grid remove'と' grid forget'を持つ 'grid'を使います。' ttk :: notebook'ウィジェットが適切なスタイルのタブを持たないように設定することができます(これはウィジェットにいくつかの利点がありますレイアウト)。悲しいかな、スタイルのハッキングはDeep Voodooのはるかに広い範囲にとどまっています。 :-( –

+0

グレートコード!2つの 'pack'コマンドの間でウィンドウが縮小して拡大するかどうかを知りたかっただけです(または必要に応じて2番目のパックの後にサイズを調整します)。私はTcl/Tkがシングルスレッドであり、最後まで待たなければなりません。(1秒待つために)2つのpackコマンドの間に 'after 1000 'を挿入してテストしました。関数の実行の –

関連する問題