【问题标题】:How to move the insertion cursor of a tkinter text widget to a certain index如何将 tkinter 文本小部件的插入光标移动到某个索引
【发布时间】:2020-09-02 15:14:49
【问题描述】:

我想将tkinter text widget内的insertion cursor(caret)(|)移动到某个text widget indice

用例:

我正在制作一个自动完成程序,如果我输入一个single apostrophe(quotation mark),另一个会自动插入到文本小部件中,我可以正常工作。但是在生成第二个撇号之后,我想将插入光标(插入符号)放在两个撇号的中间而不是末尾。像这样-:

输入一个撇号(在 tkinter 文本小部件内)-:

'[insertion cursor(caret)(|)]

另一个是自动插入的,将插入光标(插入符号)推到最后(这部分的代码我已经成功地弄清楚了。)-:

''[insertion cursor(caret)(|)]

插入光标(插入符号)在两个撇号之间移动(这个问题的目的。)-:

'[insertion cursor(caret)(|)]'

注意:这些操作都发生在tkinter text widget内。

【问题讨论】:

  • 你的问题不清楚。
  • 好吧,你知道当我们写的时候有一条垂直线出现在我们当前的索引处,这称为插入光标,而我想问的是如何使用 tkinter 移动插入光标。希望简化它。基本上我正在做的事情可能会使它复杂化,所以基本上这是一个简化的问题。
  • @Ahmed Mamdouh,我已尝试编辑问题以使其更加清晰。感谢您指出这一点,如果问题的可读性达到良好标准,它肯定会对未来的访问者有所帮助。也很抱歉编辑晚了。

标签: python tkinter text


【解决方案1】:

您调用mark_set 方法,使用“insert”作为标记的名称。

the_widget.mark_set("insert", "4.0") 将插入光标设置在第四行的开头。您可以使用the_widget.mark_set("insert", "insert-1c") 将光标向后移动一个字符。

这里是自动插入右括号或方括号的一种方法示例。在此示例中,代码插入了开始和结束字符,因此它返回“break”以防止文本小部件提供的默认行为。

import tkinter as tk

def autocomplete(widget, first, last):
    # insert the two characters at the insertion point
    widget.insert("insert", first + last)

    # move insertion cursor back one character
    widget.mark_set("insert", "insert-1c")

    # prevent the text widget from inserting the character that
    # triggered the event since we've already inserted it.
    return "break"

root = tk.Tk()
text = tk.Text(root, wrap="word")
text.pack(fill="both", expand=True)

text.bind("(", lambda event: autocomplete(event.widget, "(", ")"))
text.bind("[", lambda event: autocomplete(event.widget, "[", "]"))

root.mainloop()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多