【问题标题】:tkinter text widget: Setting the insertion cursertkinter 文本小部件:设置插入光标
【发布时间】:2014-03-18 03:27:09
【问题描述】:

我想在 tkinter 文本小部件中创建自动完成功能。当自动完成找到一个可能的单词时,它会删除用户的部分单词,然后插入完整的单词:

#if some matched words are found
if self._hits != []:

   #delete the part written by the user
   self.text.delete("%s+1c" % Space1Index,INSERT)

   #Inser the complete word
   self.text.insert("%s+1c" % Space1Index,self._hits[self._hit_index])

然后我将标记由自动完成添加的文本,使其具有与用户输入不同的外观。例如,如果用户写了te,自动完成将写完整的单词test。 te 为正常字体,st 以另一种颜色书写,等待用户通过计算机确认所选单词。

我的问题是,在插入单词test 并正确突出显示之后,如何在te 之后再次移动INSERT 位置?

我希望我能充分澄清我的问题,如果需要更多解释,请告诉我。

【问题讨论】:

  • 您可能想要更改问题的标题。它提到了自动完成,但实际问题是关于设置插入光标。
  • 你能告诉我们它的完整代码吗?谢谢

标签: python autocomplete tkinter


【解决方案1】:

要移动插入光标,请将“插入”标记设置到您想要的任何位置:

self.text.mark_set("insert", "%s+1c" % ...)

-或-

self.text.mark_set(INSERT, "%s+1c" % ...)

【讨论】:

    【解决方案2】:

    您可以在自动完成更改之前保存插入标记的位置,并在之后将标记重置为保存的位置:

    old_pos = self.text.index("insert")
    # make autocompletion changes
    self.text.mark_set("insert", old_pos)
    

    【讨论】:

    • 谢谢!你对文本小部件有什么好的参考吗?我在网上找到了一些,但没有足够的例子或解释。
    • 我认为你的意思是 self.text.mark_set("insert", old_pos)
    • 是的,我已经修改了我的答案。对于参考,有tkdocs.com。非常好,但并非所有小部件都被覆盖(还)。最终的文档是 tcl.tk/man/tcl8.5/TkCmd/contents.htm 它适用于 tcl,但函数在 tkinter 中的移植几乎相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多