Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: El mas antiguo en 27 Agosto 2022, 20:51 pm



Título: Obtener palabra a partir de la última letra(widget TEXT)
Publicado por: El mas antiguo en 27 Agosto 2022, 20:51 pm
Hola gente, ¿cómo están?.
Voy a tratar de ser práctico, estoy haciendo una especie de bloc de notas
con la particularidad que tiene un corrector ortográfico y para ello decidí que
al pulsar la tecla <space> se corrija la palabra que se acaba de escribir.-
El caso es que de esta manera obtengo la última letra¿como hacer para
retroceder y obtener la palabra completa?.-
Si la respuesta es regresando con las coordenadas una a una hasta que
encuentre un espacio o la columna sea cero, ya me imagino como hacerlo
la consulta es ¿hay otra manera más práctica?

Código
  1. keyboard.on_press_key("space", partial(corregir.comienzo, editorTexto, ortografia))
  2.  
  3. def comienzo(editorTexto, ortografia, event):
  4.    lineaColumna = editorTexto.index(tk.INSERT)
  5.    print(lineaColumna)

Citar
"la consulta"
a = 1.11
t = 1.10
l = 1.9
u = 1.8
[...]

Slds. Daniel ☕☕☕


Título: Re: Obtener palabra a partir de la última letra(widger TEXT)
Publicado por: Danielㅤ en 28 Agosto 2022, 00:15 am
Hola tocayo querido, hay muchas formas de lograr lo que deseas, una forma que se me ocurrió ahora es por ejemplo guardar la última palabra en una variable, ya que cuando presionas la tecla de espacio es porque una palabra se ha completado por eso dejas el espacio para ingresar la siguiente palabra.

Un ejemplo sería:

La luz de luma (aquí se escribió mal la palabra "luna", entonces cuando se presione el espacio para seguir escribiendo, el código ya guardó en una variable esa última palabra que sería "luma" y al ver que es incorrecta, la cambiará por la correcta que es "luna")


Saludos


Título: Re: Obtener palabra a partir de la última letra(widger TEXT)
Publicado por: El mas antiguo en 28 Agosto 2022, 00:56 am
Hola Dani, ¿ cómo estás?.
Gracias por tu tiempo, ahora mismo no me cae la ficha de como lograr
lo que propones, pero me parece una muy buena idea.-
Voy a seguir picando código y seguramente lo voy a lograr, me gusta la idea.-

Slds. Daniel ☕☕☕


Título: Re: Obtener palabra a partir de la última letra(widger TEXT)
Publicado por: reymosquito en 28 Agosto 2022, 05:12 am
como te dijeron hay muchas formas de hacerlo, en mi caso te muestro un ejemplo y lo tendrías que adaptar a tus necesidades:
Código
  1. #-*- coding: utf  -8 -*-
  2. import keyboard
  3. import tkinter as tk
  4.  
  5. def  obtener_palabra(event=None):
  6.    palabra = text.get("insert -1c wordstart", "insert -1c wordend" )
  7.    if palabra in "\n ":
  8.        palabra = text.get("insert -1c wordstart", "insert -1c wordend")
  9.    print(repr(palabra))
  10.  
  11. win = tk.Tk()
  12. text = tk.Text(win)
  13. text.pack()
  14. keyboard.on_press_key("space", obtener_palabra)
  15. win.mainloop()

Edito: uso la biblioteca keyboard porque supongo la estás usando, sino es así con el ,método bind ya alcanza.


Título: Re: Obtener palabra a partir de la última letra(widger TEXT)
Publicado por: El mas antiguo en 28 Agosto 2022, 15:11 pm
Hola Rey, el código cumple con el cometido maravillosamente,
le agregué un evento <Return> por obvias razones.
Me surgen dudas con "wordstart", "wordend" que por lo poco que
encontré es exclusiva del widget Text, la utilizaré sin más y ya está
Gracias y hasta la próxima...


Slds. Daniel ☕☕☕


Título: Re: Obtener palabra a partir de la última letra(widget TEXT)
Publicado por: El mas antiguo en 1 Septiembre 2022, 14:48 pm
En parte pude disipar mis dudas con "wordstart", "wordend" necesitaba la fila/columna
de la palabra para que al mostrar las posibles correctas en un listbox si se selecciona
alguna pueda reemplazarla en el bloc de notas, créanme que no me dio la cara para
consultarlos(por aquello de ponerme pesado) lo puse para que lo lean entre líneas,
pero no dio resultado, en fin me costó mucho, pero mucho encontrar tan sencilla
solución por eso la exponga para que si alguien necesita algo parecido no reniegue tanto.-

Código
  1. #-*- coding: utf  -8 -*-
  2. import tkinter as tk
  3.  
  4. def  obtener_palabra(event=None):
  5.    palabra = text.get("insert -1c wordstart", "insert -1c wordend" )
  6.    if palabra in "\n ":
  7.        palabra = text.get("insert -1c wordstart", "insert -1c wordend")
  8.  
  9.    inicio = text.index("insert-1c wordstart")
  10.    final  = text.index("insert-1c wordend")
  11.    print(f"{palabra}..: Inicia {inicio} Finaliza {final}")
  12.  
  13. win = tk.Tk()
  14. text = tk.Text(win)
  15. text.pack()
  16. text.bind("<space>", obtener_palabra)
  17. text.focus()
  18.  
  19.  
  20. win.mainloop()


Slds. Daniel ☕☕☕


Título: Re: Obtener palabra a partir de la última letra(widget TEXT)
Publicado por: reymosquito en 1 Septiembre 2022, 17:41 pm
Hola Daniel:
Cuando puse el código era un ejemplo con las posibilidades para que investigues, no siempre pongo códigos en su forma final. En ambos ejemplos hay redundancia y omisiones por cierto.
por ejemplo:

Código
  1. final  = text.index("insert-1c wordend")

puede ser tranquilamente resumida a:

Código
  1. final  = text.index("insert -1c")
o
Código
  1. final  = text.index('current')

Donde ambos resultados te darán lo mismo, de igual forma esta bueno que estás  investigando las pistas que te puedan dar y probar distintos modos.

Saludos