如何列出Tcl / Tk中的所有顶层,包括通过wm manage创建的顶层?

时间:2018-10-29 12:28:35

标签: tcl tk

我最近发现了一个非常有用的wm manage命令,该命令可以在层次结构中的任何位置获取现有的tk框架,并将其提升为新的顶级小部件。对于撕下现有的单个窗口应用程序的各个部分并制作独立的工具面板等非常有用。

我现在发现自己想要列出应用程序中的所有顶层,因为现在除了原始主窗口还有更多。

winfo children .的结果给出了作为根窗口的子级的所有顶层,但是所有被撕掉的顶层保留了其在层次结构中的路径,因此未列出。有没有其他方法列出所有tk窗口名称,这些名称是将包含这些撕掉的帧的顶层?

2 个答案:

答案 0 :(得分:3)

您可以遍历所有窗口小部件层次结构并收集[winfo toplevel]等于窗口小部件本身的窗口小部件,例如以下proc:

proc toplevels {{w .}} {
    if {[winfo toplevel $w] eq $w} {
        set res [list $w]
    } else {
        set res {}
    }
    foreach ww [winfo children $w] {
        lappend res {*}[toplevels $ww]
    }
    return $res
}

答案 1 :(得分:2)

如果只需要屏幕上当前显示的顶层,则wm stackorder .命令可以解决问题。