我正在尝试在窗口小部件中显示二进制信息(即文本,条目,标签)。单个字符(在这种情况下只有'0'或'1'应该是可点击的,以便它们在0和1之间切换。
我不太确定使用哪个小部件以及如何将鼠标事件绑定到单个角色。
我希望有人可以指出我正确的方向,因为我对传统知识方面很新。
答案 0 :(得分:4)
最简单的两个小部件是canvas和text。使用画布,您可以将数字字符串设为单个文本项,并自行将点击位置转换为字符索引,或者(更有可能)使每个字符成为自己的文本项。 (就像你那样,你可以让每个角色都是单独的风格和可点击的,只需要很少的努力,但你需要注意一些事情的布局方面。)
但是,我认为文本小部件可能更合适。这使您可以在字符范围上设置标记,这些标记既可绑定又可设置样式。
pack [text .t -takefocus 0]
set binstring "01011010"
set counter 0
foreach char [split $binstring ""] {
set tag ch$counter
.t insert end $char $tag
.t tag bind $tag <Enter> ".t tag configure $tag -foreground red"
.t tag bind $tag <Leave> ".t tag configure $tag -foreground black"
.t tag bind $tag <1> [list clicked .t $tag $counter]
incr counter
}
proc clicked {w tag counter} {
global binstring
# Update the display
set idx [$w index $tag.first]
set ch [expr {![$w get $idx]}]
$w delete $idx
$w insert $idx $ch $tag
# Update the variable
set binstring [string replace $binstring $counter $counter $ch]
# Print the current state
puts "binstring is now $binstring"
}