0

how can i search a ScrolledText box for specific words in a list and underline or highlighting those words.

ex:

mybox.insert(tk.INSERT, "just trying to learn python")
lst_words2find=[trying, python]

mybox = ScrolledText(root, width=75, height=10, wrap=tk.WORD)
mybox.grid(column=4, row=2, padx=10, pady=10, ipady=35)

Thanks in advance

As sugested by Priya this seems to be what a need, i just cant seem to implement it

from tkinter import *
import tkinter as tk


root = Tk()
w, h = root.winfo_screenwidth(), root.winfo_screenheight()
root.geometry("%dx%d+0+0" % (w, h))


root.title("teste")


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")



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




if __name__ == "__main__":
    root.mainloop()

Can you help me implement it?, i need it to be able to search for 1 or more words, one case ill have to search for 7 words.

ric
  • 1
  • 3
  • This question [stackoverflow/q/3781670](https://stackoverflow.com/questions/3781670/how-to-highlight-text-in-a-tkinter-text-widget) is a great reference. – Priya Jul 07 '21 at 16:55

0 Answers0