@oneLEAM

Как подсвечивать разными цветами текст в виджете text tkinter?

Нужно причём чтобы подсвечивались слова которые написал пользователь. К примеру : написал "банан" написанная надпись "банан" начала подсвечиваться жёлтым, написал "яблоко" подвешивается красным. Как это реализовать?
  • Вопрос задан
  • 90 просмотров
Решения вопроса 1
sanya84
@sanya84
Фанатик Python 3
Примерно так, а дальше сами.
from tkinter import Tk, Text, END, INSERT, Label, CURRENT


class Application(Tk):
    def __init__(self):
        super().__init__()

        self.widget_text = Text(self)
        self.widget_text.pack(expand=True)

        self.configure_key_words()

        self.widget_text.bind("<KeyPress>", self.handler)

    def get_last_line(self):
        full_text = self.widget_text.get("1.0", END)
        list_string = full_text.split('\n')[::-1]
        last_line = list_string[1]
        return last_line

    def get_last_word(self):
        last_word = self.get_last_line().split(' ')[-1]
        return last_word

    def configure_key_words(self):
        self.widget_text.tag_config('apple', foreground='red', underline=1,
                                    font=("Arial", 12, 'bold'))

        self.widget_text.tag_config('banana', foreground='green',
                                    font=("Arial", 12, 'bold'))

    def handler(self, event):
        last_word = self.get_last_word()
        if event.char == ' ' or '\n':
            line, _ = self.widget_text.index(CURRENT).split(".")
            word_start_position = self.get_last_line().rfind(last_word)
            match last_word:
                case "яблоко":
                    print(line, word_start_position)
                    self.widget_text.delete(f"{line}.{word_start_position}", END)
                    self.widget_text.insert(f"{line}.{word_start_position}", 'яблоко', 'apple')
                case "банан":
                    print(line, word_start_position)
                    self.widget_text.delete(f"{line}.{word_start_position}", END)
                    self.widget_text.insert(f"{line}.{word_start_position}", 'банан', 'banana')
                

def main():
    Application().mainloop()


if __name__ == '__main__':
    main()


63e37e3c0edb3768538556.png
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
1. Почитать документацию о том как работают теги. В частности, методы tag_add(), tag_remove() и tag_config().
2. Сделать простой пример, чтобы убедиться, что ты понял, как оно работает.
3. Применить в своём проекте.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы