Tkinter模拟上下箭头键

0 投票
1 回答
1751 浏览
提问于 2025-04-18 07:21

我需要自己做一个事件处理器,让文本小部件能正常使用上下箭头键的功能。不过,有一些小问题我得想办法解决。

你可能会觉得只要加减一行就能让光标上下移动,听起来没错。但如果你开启了自动换行,光标在换行的情况下可能会移动得比你预想的还要多。而且,不管你有没有开启自动换行,箭头键的移动可能也不会像平常那样均匀(因为光标会停留在同一个字符上,不管这个字符在什么地方)。

那么,我该如何在Tkinter中模拟正常的功能呢?

我需要重新编程上箭头键(下箭头也是)——这不是我问题的核心,但因为大家喜欢问各种不同的方法,所以我就说说这个:

我正在做一个文本编辑器,而Tkinter的文本小部件在处理这些事情时有个bug,我打算修复它。这个bug是,如果你用shift+home选择文本,然后再用shift+up(或者shift+down,或者control+shift+left,control+shift+right)继续选择文本,可能会选择到一些不该选择的内容,这取决于你怎么操作。修复control+shift+left和control+shift+right应该不难,但我在处理shift+up和shift+down时遇到了定位的问题。我已经为类似的原因重新编程了home、end、left、right、shift+left和shift+right(Tkinter真不错,因为你可以这样重新编程)。

我使用的是Python 3.4。

我在想,也许获取插入点的x,y坐标会有帮助。不过,我没有找到相关的内容(只看到了鼠标的坐标)。

1 个回答

1

我不太确定你遇到的问题是什么。你知道可以让文本小部件计算上一行或下一行的索引吗?而且可以选择是否考虑换行。

关于索引修饰符的内容,可以参考tk文本小部件的文档

+ count ?submodifier? lines

这个意思是把索引向前调整count行,同时保持在这一行中的字符位置不变。如果当前索引所在行后面少于count行,那么就把索引设置为文本最后一行的同一字符位置。如果这一行的长度不够,无法包含指定字符位置的字符,就会把字符位置调整到这一行的最后一个字符(也就是换行符)。count两边的空格是可选的。如果给了显示修饰符,那么每一行的视觉显示都会单独计算。否则,如果给了其他修饰符(或者没有修饰符),那么每一行的逻辑行(不管它在视觉上被换了多少次行)只算一次。如果相关的行没有换行,那么这两种计算方式是等价的。

你也可以用负号来向后移动。

例如:

next_line = the_widget.index("insert +1 display lines")

撰写回答