在Tkinter Text小部件中键入时格式化文本

时间:2015-03-11 13:40:25

标签: python tkinter text-widget

我试图在给定文本中添加注释,但不得更改。它非常像普通文本编辑器中的格式化。

我尝试通过.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()

编辑:虽然布莱恩的回答对我有用,但你可能会遇到如下所述的快速打字问题:how-to-get-cursor-position

1 个答案:

答案 0 :(得分:1)

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