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

seb*_*ebs 2 tk-toolkit tcl widget

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

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

我希望有人能指出我正确的方向,因为我对 TK 方面还很陌生。

Don*_*ows 5

最简单的两个小部件是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"
}
Run Code Online (Sandbox Code Playgroud)