В tkinter нет ничего встроенного, что напрямую поддерживает это. Однако для большинства целей достаточно написать функцию, которая опрашивает позицию курсора и обновляет подсветку через равные промежутки времени.
Например:
import Tkinter as tk
class MyApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.text = tk.Text(self)
self.text.pack(side="top", fill="both", expand=True)
self.text.tag_configure("current_line", background="#e9e9e9")
self._highlight_current_line()
def _highlight_current_line(self, interval=100):
'''Updates the 'current line' highlighting every "interval" milliseconds'''
self.text.tag_remove("current_line", 1.0, "end")
self.text.tag_add("current_line", "insert linestart", "insert lineend+1c")
self.after(interval, self._highlight_current_line)
app = MyApp()
app.mainloop()
Очевидно, что чем больше интервал, тем больше будет «лагов», и чем короче интервал, тем больше будет задействовано ЦП, но между крайними точками, где практически нет заметного лага, и довольно незаметное отставание довольно большое, и незаметное увеличение загрузки процессора.
Есть еще один способ сделать это, не включая опрос и абсолютно надежный. Вы можете перемещать выделение точно, когда курсор вставки фактически перемещается, но это требует написания некоторого встроенного кода Tcl для создания прокси фактического виджета tk, который скрыт в реализации объекта Tkinter Text
.
Наконец, третий способ - установить пользовательские привязки для всех возможных событий, которые изменяют местоположение курсора. Хотя это возможно, трудно получить 100% правильность, поскольку вы должны учитывать все события, которые изменяют положение курсора, а также обрабатывать места в вашем коде, которые могут перемещать курсор без использования события. Тем не менее, использование привязок - это очень хорошее решение, оно просто требует немного больше работы.