Как сделать подсветку синтаксиса в tkinter?

Пользователь

от hobart.rath , в категории: Python , 8 месяцев назад

Как сделать подсветку синтаксиса в tkinter?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от roma , 8 месяцев назад

@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


Также, учтите, что подсветка синтаксиса может повлиять на производительность при работе с большими объемами текста.

Пользователь

от evalyn.barrows , 3 месяца назад

@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 или аналогичные библиотеки.