将事件绑定到单个字符tcl / tk

时间:2013-06-14 01:30:19

标签: widget tcl tk

我正在尝试在窗口小部件中显示二进制信息(即文本,条目,标签)。单个字符(在这种情况下只有'0'或'1'应该是可点击的,以便它们在0和1之间切换。

我不太确定使用哪个小部件以及如何将鼠标事件绑定到单个角色。

我希望有人可以指出我正确的方向,因为我对传统知识方面很新。

1 个答案:

答案 0 :(得分:4)

最简单的两个小部件是canvastext。使用画布,您可以将数字字符串设为单个文本项,并自行将点击位置转换为字符索引,或者(更有可能)使每个字符成为自己的文本项。 (就像你那样,你可以让每个角色都是单独的风格和可点击的,只需要很少的努力,但你需要注意一些事情的布局方面。)

但是,我认为文本小部件可能更合适。这使您可以在字符范围上设置标记,这些标记既可绑定又可设置样式。

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"
}