如何在tk中将所有小部件状态设置为禁用?

时间:2010-02-08 06:29:23

标签: widget tk

有没有办法在单个proc中禁用tk窗口中的所有小部件?参数可以只是初始的顶级路径。

1 个答案:

答案 0 :(得分:5)

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

,这通常是足够好的

大多数tk小部件接受“-state”选项,而那些不支持的选项通常可以忽略,因为状态无关紧要(例如,框架小部件)。因此,您可以迭代所有小部件并执行类似[catch {$ widget configure -state disabled}]的操作。如果您有异常的小部件需要通过其他方式启用或禁用(例如具有“state”子命令的ttk按钮),这将不起作用。

如果你有一个使用标准小部件的简单应用程序,这样的东西可能是足够好的:

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

为了精确控制,您可以使用“[winfo class $ widget]”来获取窗口小部件的类,并根据类执行不同的命令。