Search String in Text using Python-Tkinter

Tkinter is the standard GUI library for Python. It provides a powerful object-oriented interface to the Tk GUI toolkit. In this article, we’ll see how to search for a specific string in a given text window using Tkinter.

NOTE : For more detailed information on Tkinter, refer to Python GUI – Ttkinter

Method to create user-defined function to search(def find)
An inner loop will search the text widget for all instances of each word, tagging them for highlighting. The termination condition for the loop is that the current word was not found in the widget. Then, after all, words have been tagged, set their color.

  • Declare a variable s and get the string input of the user to be searched in the text( in this case the string is typed in ‘edit’ text box window)
  • Initialize index value as 1.
  • Initialize inner loop.
  • Using .search() search for the desired string (in this case s) in the given text and update the current index value till the end of the text.
  • Last Index value is the addition of the current index and length of the string.
  • Add ‘found’ tag from index 1 to last index whenever a desired string is found in between.
  • Change focus to find button
  • Once find button is pressed. the string with ‘found’ tags, the string is highlighted in red.
  • use .mainloop() for termination as any user will terminate the program
Example 1:

filter_none

edit
close

play_arrow

link
brightness_4
code

#Python Program to search string in text using Tkinter
  
from tkinter import *
  
#to create a window
root = Tk()
  
#root window is the parent window
fram = Frame(root)
  
#adding label to search box
Label(fram,text='Text to find:').pack(side=LEFT) 
  
#adding of single line text box
edit = Entry(fram) 
  
#positioning of text box
edit.pack(side=LEFT, fill=BOTH, expand=1
  
#setting focus
edit.focus_set() 
  
#adding of search button
butt = Button(fram, text='Find')  
butt.pack(side=RIGHT) 
fram.pack(side=TOP)
  
#text box in root window
text = Text(root) 
  
#text input area at index 1 in text window
text.insert('1.0','''Type your text here'''
text.pack(side=BOTTOM)
  
  
#function to search string in text
def find():
      
    #remove tag 'found' from index 1 to END
    text.tag_remove('found', '1.0', END) 
      
    #returns to widget currently in focus
    s = edit.get() 
    if s:
        idx = '1.0'
        while 1:
            #searches for desried string from index 1
            idx = text.search(s, idx, nocase=1
                              stopindex=END) 
            if not idx: break
              
            #last index sum of current index and
            #length of text
            lastidx = '%s+%dc' % (idx, len(s)) 
              
            #overwrite 'Found' at idx
            text.tag_add('found', idx, lastidx) 
            idx = lastidx
          
        #mark located string as red
        text.tag_config('found', foreground='red'
    edit.focus_set()
butt.config(command=find)
  
#mainloop function calls the endless loop of the window,
#so the window will wait for any 
#user interaction till we close it
root.mainloop() 

chevron_right


OUTPUT : Search String in Text using Python-Tkinter



The larger text box is for the text input and the smaller text box is for the string input that needs to be found in the given text and once found, it is marked in red.

Example 2:

filter_none

edit
close

play_arrow

link
brightness_4
code

#Python Program to search string in text usin Tkinter
  
from tkinter import *
  
root = Tk()
fram = Frame(root)
Label(fram,text='Text to find:').pack(side=LEFT) 
edit = Entry(fram) 
edit.pack(side=LEFT, fill=BOTH, expand=1
edit.focus_set() 
butt = Button(fram, text='Find')  
butt.pack(side=RIGHT) 
fram.pack(side=TOP)
  
  
text = Text(root) 
text.insert('1.0','''Type your text here'''
text.pack(side=BOTTOM)
  
  
  
def find():
      
    text.tag_remove('found', '1.0', END) 
    s = edit.get() 
    if s:
        idx = '1.0'
        while 1:
            idx = text.search(s, idx, nocase=1
                              stopindex=END) 
            if not idx: break
            lastidx = '%s+%dc' % (idx, len(s)) 
            text.tag_add('found', idx, lastidx) 
            idx = lastidx
       text.tag_config('found', foreground='red'
    edit.focus_set()
butt.config(command=find)
root.mainloop() 

chevron_right


OUTPUT : Search String in Text using Python-Tkinter




My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.


Article Tags :

Be the First to upvote.


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.