【问题标题】:Tkinter simulating the up/down arrow keysTkinter 模拟上/下箭头键
【发布时间】:2014-07-12 05:32:49
【问题描述】:

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

您可能认为只需添加/减去一行,它就会按预期上升/下降。嗯,这是真的。但是,如果你有自动换行或其他东西,你会比你在换行上的预期走得更远。另外,箭头键可能不会像往常一样在晚上升起,无论是否打开自动换行(因为无论该字符在哪里,它都会保持在同一个字符上)。

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

这就是我需要重新编程向上箭头键(也向下)的原因 - 这对我的问题来说不是必需的,但因为人们喜欢提问并想出替代方法,所以你去:

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

我正在使用 Python 3.4。

我在想也许获取插入的 x,y 坐标可能会有所帮助。不过,我什么也没看到(只是鼠标坐标)。

【问题讨论】:

    标签: python tkinter handler arrow-keys


    【解决方案1】:

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

    来自tk text widget docs 上的索引修饰符:

    + count ?submodifier?线条

    通过计数行向前调整索引,在行内保留相同的字符位置。如果有 在包含当前索引的行之后少于 count 行, 然后将索引设置为引用最后一个相同的字符位置 文本行。然后,如果行不够长,无法包含 字符在指定的字符位置,调整字符 位置来引用行的最后一个字符(换行符)。 count 两边的空格是可选的。如果显示 给定子修饰符,然后计算每个视觉显示行 分别地。否则,如果给出任何(或没有修饰符),则每个 逻辑行(无论它被视觉包装多少次)很重要 就一次。如果相关行没有换行,那么这两个 计数方法是等价的。

    您也可以使用减号向后退。

    例如:

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

    【讨论】:

    • 我知道insert+1l 但我不知道显示线。谢谢!这看起来像我需要的自动换行。但是,它并没有让我知道如何直接在插入上方获取字符(这可能不一定是我所在的字符,因为字符的宽度不同,除非我使用的是 monopspace 字体)。顺便说一句,这是一个很棒的文档链接。有没有办法获得插入的 x,y。既然我们可以得到给定 x,y 的位置,那么得到 x,y 就应该这样做。
    • @user2962794:可以使用dlineinfobbox方法获取特定索引的坐标。
    • 哇。我刚刚注意到,使用显示线自动确保它沿着一条直线前进(无论是否打开自动换行)。惊人的。所以,我不需要找坐标!
    • 实际上,我注意到仅向上显示行与自然箭头键功能并不完全相同。它逐渐向左转向,同时上下移动。
    • 我正在尝试使用 bbox 来获取 x,y 坐标和 mark_set(INSERT, "@%d,%d" % (self.arrow_x, self.arrow_y)) 来设置插入。但是,我认为这是特定于字体大小的。我想知道人们通常如何处理这个问题。
    猜你喜欢
    • 1970-01-01
    • 2013-03-07
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多