如何找到 tk 小部件的逻辑布局?

How to find logical layout of tk widget?

我正在深入学习 ttk,想知道如何为任何小部件找到逻辑布局。现在只是探索和做小实验。在以下代码中,尝试显示文本,但未记录复选按钮的布局详细信息。 所以我的问题是如何轻松地为任何小部件找到它们。


This Ttk style guide 确实是很好的参考,但对深入布局没有帮助。 谢谢。

ttk::style element create pin vsapi EXPLORERBAR 3 {
  {pressed !selected} 3
  {active !selected} 2
  {pressed selected} 6
  {active selected} 5
  {selected} 4
  {} 1
}
ttk::style layout Explorer.Pin {Explorer.Pin.pin -sticky news}
pack [ttk::checkbutton .pin -style Explorer.Pin]

要查找给定小部件使用的样式,请使用 winfo class 命令:

% ttk::checkbutton .b
% winfo class .b
TCheckbutton

然后您可以使用 ttk::style layout 转储布局:(重新格式化以提高可读性)

% ttk::style layout TCheckbutton
Checkbutton.padding -sticky nswe -children {
    Checkbutton.indicator -side left -sticky {}
    Checkbutton.focus -side left -sticky w -children {
        Checkbutton.label -sticky nswe
    }
}

这声明了元素及其放置方式。因此,要替换 indicator 元素,您可以复制此布局以定义引用新元素的新布局:

% ttk::style layout Pin.TCheckbutton {
  Checkbutton.padding -sticky nswe -children {
    Checkbutton.pin -side left -sticky {}
    Checkbutton.focus -side left -sticky w -children {
      Checkbutton.label -sticky nswe
    }
  }
}
% place [ttk::checkbutton .pin -text text -style Pin.TCheckbutton] -x 10 -y 10

您应该注意,一些元素通过 ttk::style configure 命令获取附加到样式的附加配置,因此在复制样式时您也应该复制配置:

ttk::style configure $new_stylename {*}[ttk::style configure $old_stylename]

而且很可能还有小部件状态图 (ttk::style map)。

阅读 <Tcl/Tk folder>/library/ttk 中的 ttk 库文件应该可以清楚地了解这些东西是如何组合在一起的。 vsapi.tcl 文件特别为 Windows.

做了相当多的布局