2
有没有办法在单个进程中禁用tk窗口中的所有窗口小部件?参数可以只是初始顶层路径。如何在tk中将所有小部件状态设置为禁用?
有没有办法在单个进程中禁用tk窗口中的所有窗口小部件?参数可以只是初始顶层路径。如何在tk中将所有小部件状态设置为禁用?
给定一个小部件,可以使用[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类$部件]”来获得类的小部件,并根据班级做不同的命令。
in tcl recursion proc是否可以保存小部件的先前状态?所以下次我只能启用哪些被禁用。 – OliveOne 2010-02-09 06:16:35
我想用 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