Crear funciones de Buscar y reemplazar en Tkinter Text Widget

Requisitos previos: Python GUI – tkinter
En primer lugar, debemos encontrar todas las palabras o letras que queremos reemplazar en nuestro texto a continuación, para eso usaremos la función de búsqueda en la que determinaremos todos los índices iniciales y finales del editor de la misma palabra después de eso, aplicaremos la funcionalidad de reemplazo en la que eliminaremos esa parte del texto y luego aplicaremos la función de inserción para agregar el texto en esas posiciones exactas.
Importantes funciones incorporadas utilizadas
 

  • Tk() crea una ventana base/widget base tkinter
  • Frame() crea un marco separado en una posición particular en la instancia de Tk()
  • Label() agrega la declaración o el nombre o el etiquetado de cualquier cosa
  • Entry() agrega el cuadro de diálogo para ingresar el texto
  • ‘EntryInstance’ .pack() empaqueta el cuadro de entrada en la posición especificada
  • Button() coloca un botón en la posición especificada con el comando y la etiqueta
  • Texto() coloca un cuadro de texto para escribir y agregar contenido
  • ‘TextInstance’ .insert() agrega texto en el índice especificado (aquí el índice es de tipo string)
  • ‘TextInstance’ .tag_add() Las etiquetas se utilizan para hacer referencia a todos los contenidos al mismo tiempo, por ejemplo, si un párrafo contiene el texto «esto» cinco veces y para realizar un cambio en todos ellos al mismo tiempo, usamos etiquetas . tag_Add agrega todo el texto bajo una etiqueta en particular donde proporcionamos el nombre
  • ‘TextInstance’ .tag_config() se usan para configurarlos, es decir, resaltar, fuente, color de fondo, color de primer plano
  • ‘TextInstance’ .tag_remove() utilizado para eliminar todo el texto utilizado desde el índice inicial hasta el índice final
  • ‘EntryInstance’ .get() solía tener acceso al texto ingresado dentro del cuadro de diálogo de Entrada
  • ‘TextInstance’ .search() se usa para buscar un texto en particular en todo el editor desde el índice inicial hasta el final con un argumento de ‘nocase’ que, si se establece en 1, implica que no se considerará la distinción entre mayúsculas y minúsculas en la búsqueda
  • ‘ButtonInstance’ .config() utilizado para configurar el botón, es decir, podemos agregar por separado el comando o los cambios en el botón que se llevarán a cabo cuando se presione
  • ‘TkInstance’ .mainloop() utilizado para asegurarse de que el widget de texto permanezca abierto

A continuación se muestra la implementación. 
 

Python3

from tkinter import *
 
 
# to create a window
root = Tk()
 
# root window is the parent window
fram = Frame(root)
 
# Creating Label, Entry Box, Button
# and packing them adding label to
# search box
Label(fram, text ='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
Find = Button(fram, text ='Find')
Find.pack(side = LEFT)
 
 
Label(fram, text = "Replace With ").pack(side = LEFT)
 
edit2 = Entry(fram)
edit2.pack(side = LEFT, fill = BOTH, expand = 1)
edit2.focus_set()
 
replace = Button(fram, text = 'FindNReplace')
replace.pack(side = LEFT)
 
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 desired 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()
 
def findNreplace():
     
    # remove tag 'found' from index 1 to END
    text.tag_remove('found', '1.0', END)
     
    # returns to widget currently in focus
    s = edit.get()
    r = edit2.get()
     
    if (s and r):
        idx = '1.0'
        while 1:
            # searches for desired string from index 1
            idx = text.search(s, idx, nocase = 1,
                            stopindex = END)
            print(idx)
            if not idx: break
             
            # last index sum of current index and
            # length of text
            lastidx = '% s+% dc' % (idx, len(s))
 
            text.delete(idx, lastidx)
            text.insert(idx, r)
 
            lastidx = '% s+% dc' % (idx, len(r))
             
            # overwrite 'Found' at idx
            text.tag_add('found', idx, lastidx)
            idx = lastidx
 
        # mark located string as red
        text.tag_config('found', foreground ='green', background = 'yellow')
    edit.focus_set()
 
                 
Find.config(command = find)
replace.config(command = findNreplace)
 
# mainloop function calls the endless
# loop of the window, so the window will
# wait for any user interaction till we
# close it
root.mainloop()

Producción:
 

Publicación traducida automáticamente

Artículo escrito por parshavnahta97 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *