@hobart.rath
В tkinter нативно нет поддержки подсветки синтаксиса. Однако, вы можете использовать сторонние библиотеки, такие как tkinterdnd2
или Pygments
, чтобы достичь подсветки синтаксиса в tkinter.
Ниже приведен пример использования библиотеки Pygments
для подсветки синтаксиса в tkinter:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import tkinter as tk from tkinter.ttk import * from pygments import highlight from pygments.lexers import PythonLexer from pygments.formatters import TkinterFormatter def highlight_syntax(event): code = text.get("1.0", "end-1c") highlighted_code = highlight(code, PythonLexer(), TkinterFormatter()) text.tag_add("highlighted", "1.0", "end") text.mark_set("insert", "1.0") text.delete("1.0", "end") text.insert("insert", highlighted_code) text.tag_config("highlighted", background="#f0f0f0", foreground="#000000") root = tk.Tk() text = tk.Text(root) text.pack() text.bind("<KeyRelease>", highlight_syntax) root.mainloop() |
Этот пример использует Pygments
для подсветки синтаксиса языка Python в виджете Text
в tkinter. В функции highlight_syntax
код из виджета Text
получается и обрабатывается с помощью Pygments
. Результат подсветки синтаксиса затем помещается обратно в виджет Text
.
Обратите внимание, что для использования Pygments
вам нужно будет установить его с помощью pip:
1
|
pip install pygments |
Также, учтите, что подсветка синтаксиса может повлиять на производительность при работе с большими объемами текста.
@hobart.rath
Если вы не хотите использовать сторонние библиотеки, можно реализовать простую подсветку синтаксиса в tkinter, но это будет менее гибким и эффективным способом. Вот пример, как вы можете сделать это:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
import tkinter as tk def highlight_syntax(event): code = text.get("1.0", "end-1c") text.tag_remove("keyword", "1.0", "end") keywords = ["for", "while", "if", "else", "def", "class"] # список ключевых слов for keyword in keywords: start = 1.0 while True: pos = text.search(keyword, start, stopindex="end", nocase=1) if not pos: break start = pos + "+1c" end = pos + "+%dc" % len(keyword) text.tag_add("keyword", pos, end) text.tag_config("keyword", foreground="blue") # настроить цвет root = tk.Tk() text = tk.Text(root) text.pack() text.bind("<KeyRelease>", highlight_syntax) root.mainloop() |
Этот пример подсвечивает ключевые слова из списка в синем цвете при вводе текста. Обратите внимание, что это очень базовая реализация и может не быть полностью точной или эффективной для всех языков программирования. Для более сложных задач подсветки синтаксиса рекомендуется использовать Pygments или аналогичные библиотеки.