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

时间:2015-10-16 02:18:41

标签: windows tcl tk ttk

我正在深入学习ttk,并想知道如何找到任何小部件的逻辑布局。现在只是探索和做小实验。在下面的代码中尝试显示文本但是没有记录布局详细信息的checkbutton。 因此,我想到了如何轻松地为任何小部件找到它们。

This Ttk style guide是非常好的参考,但没有帮助深入布局。 感谢你。

/**
   * Calculates and returns where two DNA sequences of equal lengths differ. For
   * example, given strings "ATGT" and "GTGA", the result should be array
   * { true, false, false, true }.
   * 
   * @param dna1 a String representing a DNA sequence of arbitrary length (equal
   *          to dna2's length), containing only the characters A, C, G and T
   * @param dna2 a String representing a DNA sequence of arbitrary length (equal
   *          to dna1's length), containing only the characters A, C, G and T
   * @return an array of boolean values, of length equivalent to both
   *         parameters' lengths, containing true in each subscript where the
   *         parameter strings differ, and false where they do not differ
   */
  public static boolean[] mutationPoints(String dna1, String dna2) {
      boolean [] mutPoint =  new boolean [dna1.length()]; 
      for( int i = 0; i < i; i++) {
          if( dna1 != dna2) {
              mutPoint[i] = False; 
          }
          else if (dna1 == dna2) {
              mutPoint[i] = True; 
          }
      }

1 个答案:

答案 0 :(得分:2)

要查找给定窗口小部件的使用样式,请使用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

Screenshot of modified checkbutton

您应该注意,某些元素会通过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做了相当多的布局。