Buenas y santas.
¿Saben si existe alguna librería que permita implementar texto predictivo (eso de que vaya arrojando resultados a medida que el usuario va escribiendo), o por el contrario, hay que hacerlo a mano?
Buenas, Diego.
No conozco ninguna, pero supongo que es algo bastante trivial de implementar. Podés bajarte algún archivo con todas las palabras del español, cargarlas en memoria e ir comparando con el texto ingresado por el usuario. Estamos hablando de unas 100.000 palabras, así que no debería haber ningún problema de memoria ni velocidad de procesamiento.
Saludos
En realidad, no necesitaría tanto, porque la búsqueda para la predicción se acotaría a un campo de la tabla.
Había pensado en una función de búsqueda que se ejecute por cada caracter ingresado, o sea debería estar continuamente ejecutándose. Y, por cada letra, mostrar coincidencias. Por ejemplo "penal y gol, es gol" se ejecuta en la "p", luego en la "p" seguida de la "e", luego en la "p" seguida de la "e" y la "n". Y devuelve lo que va encontrando en cada ejecución.
¿Es esto posible? Hasta ahora, sólo hice llamados a funciones desde un botón o un click.
Perfectísimo. Voy a investigarlo. Muchas gracias.
En realidad no, la función debería ejecutar cada vez que el usuario cambia el contenido de la caja de texto. Te conviene retornar siempre True ya que no estás validando nada, simplemente te interesa saber cuándo hay un texto nuevo para sugerir las palabras que correspondan. Te conviene basarte en el código al final del artículo:
Código:
from tkinter import ttk
import tkinter as tk
def validate_entry(action, index, new_text, previous_text, text):
print("Acción:", action)
print("Índice (posición) en el que se quiere insertar el texto:", index)
print("Texto si la validación es verdadera:", new_text)
print("Contenido anterior de la caja:", previous_text)
print("Texto que se quiere insertar:", text)
return True
root = tk.Tk()
root.config(width=300, height=200)
root.title("Mi aplicación")
entry = ttk.Entry(
validate="key",
validatecommand=(
root.register(validate_entry),
"%d", "%i", "%P", "%s", "%S"
)
)
entry.place(x=50, y=50, width=150)
root.mainloop()