如何列出 Tcl/Tk 中的所有顶层,包括通过 wm 管理创建的顶层?
How can I list all toplevels in Tcl/Tk, including those created via wm manage?
我最近发现了非常有用的 wm manage
命令,它可以在层次结构中的任何位置获取现有的 tk 框架,并将其提升为新的顶层小部件。它对于撕掉现有的单个 window 应用程序和制作独立的工具面板等很有用。
我现在发现自己想要列出应用程序中的所有顶层,因为现在比原来的主层多很多 window。
winfo children .
的结果给出了作为根 window 子级的所有顶层,但是所有被撕掉的顶层都保留了它们在层次结构中的路径,因此没有列出。是否有另一种方法可以列出所有 tk window 顶级名称,这些名称将包括这些被撕掉的框架?
您可以遍历所有小部件层次结构并收集 [winfo toplevel]
等于小部件本身的小部件,如以下过程:
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
}
如果您只需要当前显示在屏幕上的顶层,wm stackorder .
命令就可以了。
我最近发现了非常有用的 wm manage
命令,它可以在层次结构中的任何位置获取现有的 tk 框架,并将其提升为新的顶层小部件。它对于撕掉现有的单个 window 应用程序和制作独立的工具面板等很有用。
我现在发现自己想要列出应用程序中的所有顶层,因为现在比原来的主层多很多 window。
winfo children .
的结果给出了作为根 window 子级的所有顶层,但是所有被撕掉的顶层都保留了它们在层次结构中的路径,因此没有列出。是否有另一种方法可以列出所有 tk window 顶级名称,这些名称将包括这些被撕掉的框架?
您可以遍历所有小部件层次结构并收集 [winfo toplevel]
等于小部件本身的小部件,如以下过程:
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
}
如果您只需要当前显示在屏幕上的顶层,wm stackorder .
命令就可以了。