Tcl Tk Text组件仅用键盘跟踪光标行列位置的问题求助
问题原因与解决方法
原因分析
你在键盘绑定里用的@%x,%y是鼠标事件专属的坐标语法,只有触发鼠标事件(比如<Button-1>)时,Tk才会自动传入%x(组件内X坐标)和%y(组件内Y坐标)这两个参数,通过坐标转换为Text的行列位置。但键盘事件没有这类坐标参数,所以用这个语法根本无法获取光标位置,自然得不到正确结果。
而鼠标绑定能生效,是因为点击时会传递当前鼠标的坐标,Tk可以通过@%x,%y将坐标映射到对应的文本位置。
解决方法
Text组件的光标位置本身就对应内置的insert标记,直接通过index insert就能获取当前光标所在的行列位置,完全不需要依赖鼠标坐标。
修正后的代码示例
# 创建Text组件并显示 text .t pack .t # 初始化光标到6.0位置 .t mark set insert 6.0 # 绑定数字小键盘Insert键,实时显示光标位置到窗口标题 bind .t <KP_Insert> {wm title . [%W index insert]}
代码说明
[%W index insert]:%W代表触发事件的组件(这里就是.t),index insert直接获取insert标记对应的行列位置字符串(比如6.0)。- 按下小键盘Insert键时,窗口标题会立即显示当前光标所在的准确行列位置,完全脱离鼠标操作。
内容的提问来源于stack exchange,提问作者bobbly
相关产品推荐
相关产品推荐

