Python Tkinter模拟向上/向下箭头键

Python Tkinter模拟向上/向下箭头键,python,tkinter,handler,arrow-keys,Python,Tkinter,Handler,Arrow Keys,我需要制作自己的事件处理程序,在文本小部件中包含标准上/下箭头键的功能。然而,有些怪癖我必须以某种方式编程 你可能认为你可以加/减一行,它会像预期的那样上升/下降。嗯,这是真的。但是,如果你有wrap-on这个词或者其他什么,你会比你在wrap-line上预期的更高。另外,无论是否启用换行符,箭头键可能不会像通常那样均匀地向上移动(因为无论字符在哪里,它都会停留在同一个字符上) 那么,如何在Tkinter中模拟常规功能呢 这就是为什么我需要重新编程向上箭头键(也向下)-这对我的问题不是很重要,但

我需要制作自己的事件处理程序,在文本小部件中包含标准上/下箭头键的功能。然而,有些怪癖我必须以某种方式编程

你可能认为你可以加/减一行,它会像预期的那样上升/下降。嗯,这是真的。但是,如果你有wrap-on这个词或者其他什么,你会比你在wrap-line上预期的更高。另外,无论是否启用换行符,箭头键可能不会像通常那样均匀地向上移动(因为无论字符在哪里,它都会停留在同一个字符上)

那么,如何在Tkinter中模拟常规功能呢

这就是为什么我需要重新编程向上箭头键(也向下)-这对我的问题不是很重要,但因为人们喜欢提问并提出替代方法,下面是:

我正在制作一个文本编辑器,它在Tkinter文本小部件中的自然方式有一个我计划消除的bug。错误在于,如果您使用shift home或其他方式选择文本,然后尝试使用shift up(或shift down,或控制shift left或控制shift right)选择更多文本,那么它可能会选择或取消选择一些不合适的内容,具体取决于您的操作方式。它应该很容易修复控制换档左和控制换档右,但我有定位问题与换档向上和向下。出于类似的原因,我已经重新编程了home、end、left、right、shift left和shift right(Tkinter非常棒,因为你实际上可以重新编程这样的东西)

我正在使用Python 3.4


我在想也许得到插入的x,y坐标会有帮助。不过,我没有看到这方面的任何信息(只有鼠标坐标)。

我不完全确定您遇到了什么问题。您是否知道可以要求文本小部件计算前一行或下一行的索引,并考虑换行或忽略换行

从索引上的修改器:

+计数?子修饰符?线条

通过计数行向前调整索引,保留行内相同的字符位置。如果有 包含当前索引的行之后的行数少于个, 然后将索引设置为引用最后一个字符上的相同字符位置 一行文字。然后,如果行的长度不足以包含 字符在指定的字符位置,调整字符 引用行的最后一个字符(换行符)的位置。 计数两侧的空格是可选的。如果显示 给出子修改器,然后计算每个可视显示行 分别地否则,如果给定了任何(或没有修改器),则每个 逻辑行(不管它被可视化包装了多少次)计数 就一次。如果相关行没有被包装,那么这两个 计数方法是等效的

你也可以用减号向后走

例如:

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

我知道
insert+1l
,但不知道显示行。谢谢这看起来像是我需要的文字包装。但是,它不让我知道如何直接在insert上方获取字符(因为字符的宽度不同,除非我使用单空格字体,否则不一定是我使用的同一个字符)。顺便说一下,这是一个很棒的文档链接。有没有办法得到插入的x,y。既然我们可以得到给定x的位置,那么就应该得到x,y。@user2962794:您可以使用
dlineinfo
bbox
方法来获得特定索引的坐标。哇。我刚刚注意到,使用显示行可以自动确保它沿着直线运行(无论是否启用了“环绕”字)。令人惊叹的。所以,我不需要找到坐标!事实上,我已经注意到,仅仅向上显示行并不像自然箭头键那样工作。它在上下移动时逐渐向左移动。我正在尝试使用bbox获取x,y坐标,并使用mark_set(INSERT,@%d,%d“%(self.arrow_x,self.arrow_y))设置INSERT。然而,我认为这是特定于字体大小的。我想知道人们通常是如何处理这个问题的。