在 Tkinter 文本构件中键入时设置文本格式



我正在尝试为给定的文本添加不可更改的注释。这很像普通文本编辑器中的格式设置。

我试图通过.index('insert')获取当前的光标位置,然后用tag_add(current cursor, current cursor '+1c')向前标记字符,或用tag_add(current cursor + '-1c', current cursor)向后标记字符。这会导致在刚键入的字符之前或之后标记字符。

是否有任何解决方法可以实时标记实际键入的字符?

import tkinter

main = tkinter.Tk()
def typing(event):
    text.tag_configure('note', background='yellow')
    text.tag_configure('note2', background='blue')
    cur_cursor = text.index("insert")
    text.tag_add('note', cur_cursor + '-1c', cur_cursor)
    text.tag_add('note2', cur_cursor, cur_cursor + '+1c')
text = tkinter.Text(main)
text.grid()
text.bind('<Key>', typing)
for i in ['OX'*20 + 'n' for i in range(10)]:
    text.insert('end', i)
main.mainloop()

编辑:虽然布莱恩的答案对我有用,但你可能会遇到快速打字的问题,如下所述:如何获取光标位置

最简单的解决方案是在<KeyRelease>上绑定而不是<Key>。原因是文本构件实际上不会插入您键入的字符,直到触发其自己的<Key>绑定,并且该绑定始终在小部件上具有的任何自定义绑定之后触发。

相关内容

  • 没有找到相关文章

最新更新