Как выделить определенные c слов в tkinter.Text? - PullRequest
0 голосов
/ 21 июня 2020

Это не копия этого вопроса: Как выделить текст в текстовом виджете tkinter . Это скорее продолжение. Из этого вопроса я получил этот код:

class CustomText(tk.Text):
    '''A text widget with a new method, highlight_pattern()

    example:

    text = CustomText()
    text.tag_configure("red", foreground="#ff0000")
    text.highlight_pattern("this should be red", "red")

    The highlight_pattern method is a simplified python
    version of the tcl code at http://wiki.tcl.tk/3246
    '''
    def __init__(self, *args, **kwargs):
        tk.Text.__init__(self, *args, **kwargs)

    def highlight_pattern(self, pattern, tag, start="1.0", end="end",
                          regexp=False):
        '''Apply the given tag to all text that matches the given pattern

        If 'regexp' is set to True, pattern will be treated as a regular
        expression according to Tcl's regular expression syntax.
        '''

        start = self.index(start)
        end = self.index(end)
        self.mark_set("matchStart", start)
        self.mark_set("matchEnd", start)
        self.mark_set("searchLimit", end)

        count = tk.IntVar()
        while True:
            index = self.search(pattern, "matchEnd","searchLimit",
                                count=count, regexp=regexp)
            if index == "": break
            if count.get() == 0: break # degenerate pattern which matches zero-length strings
            self.mark_set("matchStart", index)
            self.mark_set("matchEnd", "%s+%sc" % (index, count.get()))
            self.tag_add(tag, "matchStart", "matchEnd")

Этот код работает очень хорошо, хотя я столкнулся с проблемой. Я действительно хочу использовать эту функцию выделения в цветовой кодировке моего python редактора. Проблема в том, что всякий раз, когда я использую это, мне нужно, чтобы он раскрашивал слова , но он раскрашивает буквы везде, где его находит, даже если это другими словами. (Например: когда я пытаюсь выделить слово «on», «on» в слове «one» также будет окрашиваться) Кто-нибудь, пожалуйста, измените этот код для меня, чтобы он окрашивал только слова.

1 Ответ

0 голосов
/ 21 июня 2020

Итак, я нашел этот пост: Поиск целых слов в текстовом виджете с помощью метода поиска , и этот код, кажется, работает отлично:

textArea.highlight_pattern("\\y" + word + "\\y", "tag", regexp=True)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...