在 Tkinter 文本小部件中键入时格式化文本
Formatting text while typing in a 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()
编辑:尽管 Bryan 的回答对我有用,但您可能会遇到此处所述的快速打字问题:how-to-get-cursor-position
最简单的解决方案是绑定 <KeyRelease>
而不是 <Key>
。原因是文本小部件实际上不会插入您键入的字符,直到它自己的 <Key>
绑定触发,并且该绑定始终触发 在 您在小部件。
我正在尝试向不能更改的给定文本添加注释。这与普通文本编辑器中的格式非常相似。
我试图通过 .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()
编辑:尽管 Bryan 的回答对我有用,但您可能会遇到此处所述的快速打字问题:how-to-get-cursor-position
最简单的解决方案是绑定 <KeyRelease>
而不是 <Key>
。原因是文本小部件实际上不会插入您键入的字符,直到它自己的 <Key>
绑定触发,并且该绑定始终触发 在 您在小部件。