我正在深入学习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;
}
}
答案 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
您应该注意,某些元素会通过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做了相当多的布局。