Сама подсветка синтакса, tkinter
Ещё раз добрый день. Я пытаюсь сделать подсветку синтакса с помощью библиотеки Pygments. Проблема заключается в том, что я не могу сделать саму подсветку. Я читал документацию(не полностью), смотрел разные готовые коды, но не помогало. Код ниже:
# Текстовое поле
class Tab(tk.Frame):
def __init__(self, root, name):
tk.Frame.__init__(self, root)
self.root = root
self.name = name
# Текстовое поле
self.textWidget = CustomText(self, font = "DejaVuSansMono 10", bg = "#fff")
# Панель с номерами строк
linenumbers = TextLineNumbers(self, width=30)
linenumbers.attach(self.textWidget)
def on_change(event):
linenumbers.redraw()
self.textWidget.bind("<<Change>>", on_change)
self.textWidget.bind("<Configure>", on_change)
# ---
self.textWidget.tag_configure("Token.Keyword", fg="red")
# ---
vsb = tk.Scrollbar(self, orient="vertical", command=self.textWidget.yview)
self.textWidget.configure(yscrollcommand=vsb.set)
linenumbers.pack(side="left", fill="y")
vsb.pack(side="right", fill="y")
self.textWidget.pack(fill='both', expand=True)
# Сохранение файла
def saveas(self, event=None):
file = filedialog.asksaveasfilename(filetypes=FILE_TYPES,
defaultextension=FILE_TYPES[0][1])
if file != "":
self.file_name = file
self.save(file)
def save(self, event=None):
if self.file_name is None:
self.saveas()
else:
self._save(self.file_name)
def save_tab(self, event=None):
file = filedialog.asksaveasfilename(filetypes=FILE_TYPES,
defaultextension=FILE_TYPES[0][1])
if file != "":
self.file_name = file
self.save(file)
def _save(self, filename):
textWidget = self.textWidget.get("0.0", "end")
with open(filename, "w") as file:
file.write(textWidget)
self.saved_text = textWidget.rstrip()
# Тестовый синтакс
def syn(self, event=None):
self.textWidget.mark_set("range_start", "1.0")
data = self.textWidget.get("1.0", "end-1c")
for token, content in lex(data, PythonLexer()):
self.textWidget.mark_set("range_end", "range_start + %dc" % len(content))
self.textWidget.tag_add(str(token), "range_start", "range_end")
self.textWidget.mark_set("range_start", "range_end")
root.bind("<Key>", self.syn)