2010-02-08 73 views

回答

5

给定一个小部件,可以使用[winfo children]获取该小部件的所有子项。通过一个微小的递归过程,您可以对小部件树中的每个小部件执行操作。如果你想懒惰,通常可以通过[info commands。*]获得所有小部件的列表。除非您的应用程序创建名称以“。”开头的过程或图像,否则这通常是足够好的。

大多数tk控件接受一个“-state”选项,而那些通常不会被忽略的状态并不重要(例如,一个框架控件)。所以,你可以遍历所有的小部件,并执行像[catch {$ widget configure -state disabled}]。如果您需要通过其他方式启用或禁用不常用的小部件(例如具有“状态”子命令的ttk按钮),则这不起作用。

如果您在使用标准部件的简单应用,这样的事情可能是不够好:

proc disable_all {path} { 
    catch {$path configure -state disabled} 
    foreach child [winfo children $path] { 
     disable_all $child 
    } 
} 

为了实现精确的控制,你可以使用“[winfo类$部件]”来获得类的小部件,并根据班级做不同的命令。

+0

in tcl recursion proc是否可以保存小部件的先前状态?所以下次我只能启用哪些被禁用。 – OliveOne 2010-02-09 06:16:35

+0

我想用 PROC walkIntoTKTree【W】{ \t组深度0 \t而{$深度<[llength [winfo儿童$ W]]} { \t \t \t walkIntoTKTree [LINDEX [winfo儿童$ W] $深度] \t \t \t incr depth; \t} \t puts“w = $ w” } 但是你的soln比较好 – OliveOne 2010-02-09 06:17:43

相关问题