2011-10-18 66 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是单线程的并且必须等到结束的功能执行。 –