检索 tcl/tk 应用程序布局结构
Retrieving a tcl/tk application layout structure
有没有办法从 tcl/tk 应用程序中检索 GUI 布局的树结构?我正在尝试检索屏幕布局,以便将其转换为 html/electron 应用程序。
有什么建议就好了。
可以使用winfo children
和基本递归得到widget层级的基本结构:
proc dumpStructure {{w .} {indent ""}} {
puts "$indent[winfo class $w] $w"
foreach configItem [$w configure] {
lassign $configItem name - - def value
if {$def ne $value && $name ne "-command"} {
# Note: we've excluded things that are set to the default and
# also the -command callbacks because they usually look messy
puts "$indent $name $value"
}
}
foreach child [winfo children $w] {
dumpStructure $child "$indent "
}
}
请注意如何使用每个小部件的 configure
方法来获取有关其设置方式的所有信息,除了 text
和 canvas
小部件要复杂得多。 (如果找不到可接受的替代方案,您可能需要重新开发它们。)几何管理配置比较棘手,因为几何管理器没有那么多通用代码(并且 text
和 canvas
在这方面特殊,但其他一些也是如此)。
菜单是它们自己的特例,但在实践中可能很容易映射。
有没有办法从 tcl/tk 应用程序中检索 GUI 布局的树结构?我正在尝试检索屏幕布局,以便将其转换为 html/electron 应用程序。
有什么建议就好了。
可以使用winfo children
和基本递归得到widget层级的基本结构:
proc dumpStructure {{w .} {indent ""}} {
puts "$indent[winfo class $w] $w"
foreach configItem [$w configure] {
lassign $configItem name - - def value
if {$def ne $value && $name ne "-command"} {
# Note: we've excluded things that are set to the default and
# also the -command callbacks because they usually look messy
puts "$indent $name $value"
}
}
foreach child [winfo children $w] {
dumpStructure $child "$indent "
}
}
请注意如何使用每个小部件的 configure
方法来获取有关其设置方式的所有信息,除了 text
和 canvas
小部件要复杂得多。 (如果找不到可接受的替代方案,您可能需要重新开发它们。)几何管理配置比较棘手,因为几何管理器没有那么多通用代码(并且 text
和 canvas
在这方面特殊,但其他一些也是如此)。
菜单是它们自己的特例,但在实践中可能很容易映射。