2011-10-18 94 views
4

我想創建一個可以隱藏並顯示的框架。問題是Tk不提供任何隱藏/解壓縮命令。我使用vtcl,並有一個選項「Window hode」,它只隱藏頂層的窗口。現在我想隱藏一個框架,然後再次顯示相同的框架。它可以被認爲是解開一個框架並顯示另一個框架。我的代碼可以是這樣的:在tcl隱藏和顯示框架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$top.frame2切換顯示可替代地,當該進程內被調用。所有,我想知道的是,是否存在和命令像unpack這可以幫助我做到這一點?順便說一句,unpack這裏只是一個想法。

+0

似乎是用「疊架」和'raise'命令另一種解決方案(我沒有嘗試然而)。如果兩個框架具有不同的大小並且使用佈局管理器(例如'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'來獲取信息以保存通話之間的打包窗口,以便恢復正常工作。替代方案是使用具有「網格移除」和「網格忘記」的「網格」,我認爲您可以配置「ttk :: notebook」小部件,使其不具有合適樣式的選項卡(這對於小部件具有一些優勢佈局)。唉,風格黑客仍然深刻Voodoo遠遠超過它應該。 :-( –

+0

偉大的代碼!我只是想知道窗口是否縮小並在兩個'pack'命令之間增長(或者根據需要只在第二個包之後調整大小)結果:不縮水並再次增長,只有一個在命令處理程序「toggle」完成後調整窗口大小我已經在兩個pack命令之間插入了'1000之後'(等待一秒)來測試這個。我的解釋:Tcl/Tk是單線程的並且必須等到結束的功能執行。 –