TODOPIC

Lenguajes de programación para PC => Python => Mensaje iniciado por: Daniel1952 en 06 de Mayo de 2022, 12:04:20

Título: Seleccionar palabra en widget TEXT en tkinter.
Publicado por: Daniel1952 en 06 de Mayo de 2022, 12:04:20
Hola Picuino ¿cómo estás?, hola gente.
La consulta es para saber si conocen algún método que reemplace
lo que yo logro a mi manera, esto funciona, pero tengo una dificultad,
Si la palabra que selecciono (con doble click) no tiene un espacio al
final "search" no tiene como saber el final de la palabra seleccionada y
el comienzo de la próxima.-
De más esta decir que esto ocurre solamente si la palabra es la última y
no encuentra un espacio o si es la última y la próxima comienza en la
próxima fila.-

Código: [Seleccionar]
def inicioFinal():
    inicio = texto.index("insert")
    try:
        final = texto.search(" ", inicio, stopindex=END)
        palabra = texto.get(inicio, final)
    except:
        MessageBox.showwarning("!!! Atención !!!", "Debe dejar un espacio al final de la palabra.")
    else:   
        encontradas = corregir.principal(palabra)
        if encontradas:
            mostrar(encontradas, inicio, final)

Bueno, para iniciar creo que es suficiente, Uds. me dirán.-
Slds. Daniel ☕☕☕
Título: Re:Seleccionar palabra en widget TEXT en tkinter.
Publicado por: Picuino en 07 de Mayo de 2022, 09:31:48
Hola Daniel.
¿Puedes poner un programa que funcione para poder probarlo?
No tengo claro cual es el texto.

Un saludo
Título: Re:Seleccionar palabra en widget TEXT en tkinter.
Publicado por: Daniel1952 en 07 de Mayo de 2022, 13:36:42
Hola, buen día.-
Dejo un programita como referencia porque el principal, lo estoy
modificando casi todo, este seguramente te servirá como referencia.-
Además de la búsqueda del método que reemplace esto, no logro
entender por qué si seleccionas con doble clic el resultado es distinto
que hacerlo con un botón, seguiremos investigando.-

Código: [Seleccionar]
from tkinter import *
from tkinter import ttk
 
def inicioFinal():
    inicio = text.index("insert")
    try:
        final = text.search(" ", inicio, stopindex=END)
        palabra = text.get(inicio, final)
    except:
        texto = "Debe dejar un espacio después de la última palabra......"
        messagebox.showinfo("!!! Atención!!!", texto)
    else:   
        final = f" La palabra <{palabra}> inicia en la fila/columna {inicio} y finaliza en la fila/columna {final}"
        print(final)
   

root = Tk()
root.geometry("350x200+500+500")

text = Text(root, width=40, height=7)
#text.bind('<Double-1>',inicioFinal)
text.place(x=10, y=10, )
boton = ttk.Button(root, text="Obtener", command=inicioFinal)
boton.place(x=120, y=140, width=100, height=30)

text.insert("insert", "Tú eres muy buena persona")

root.mainloop()


Slds. Daniel ☕☕☕
Título: Re:Seleccionar palabra en widget TEXT en tkinter.
Publicado por: Picuino en 08 de Mayo de 2022, 17:17:48
Lo siento Daniel, me pierdo con Tkinter.
He intentado manejar la cadena de texto para buscar de otra manera o para forzar el añadido de un espacio al final, pero no me sale.
Un saludo.
Título: Re:Seleccionar palabra en widget TEXT en tkinter.
Publicado por: Daniel1952 en 08 de Mayo de 2022, 21:19:31
Hola gente, ¿Cómo están?, tuve un domingo muy productivo,
entre otras cosas pude lograr lo de seleccionar palabras,
dejo el programa por si alguien tiene las mismas dificultades.-
Por último disculpas Picuino si te quite demasiado tiempo.-

Código: [Seleccionar]
#-------------------------------------------------------------------------------
# Name:        módulo1
# Purpose:     selección(inicio-final)
#
# Author:      Daniel
#
# Created:     08/05/2022
# Copyright:   (c) Daniel 2022
# Licence:     <your licence>
#-------------------------------------------------------------------------------
from tkinter import ttk, messagebox
import tkinter as tk
from functools import partial


def get_selection(text):
    # Obtener los índices del inicio y fin de la selección
    try:
        first = text.index(tk.SEL_FIRST)
    except:
        messagebox.showinfo(" Atención", "No tiene nada seleccionado", )
    else:
        last = text.index(tk.SEL_LAST)
        palabra = text.get(first, last)
        final = f" La palabra seleccionada es...: <{palabra}>\n\nInicia en la fila/columna {first}\n"\
        f"\nfinaliza en la fila/columna {last}"
        messagebox.showinfo(" Información", final)



def main():

    root = tk.Tk()
    root.geometry("400x200+500+500")

    text = tk.Text(root, width = 50, heigh = 3)
    text.pack()

    text.insert(tk.INSERT, "Amo programar y mejor si es con Python")

    button = ttk.Button(text="Obtener selección", command=partial(get_selection, text))
    button.place(x=140, y=50, width = 115, heigh = 40 )

    root.mainloop()

if __name__ == '__main__':
    main()

Slds. Daniel ☕☕☕
Título: Re:Seleccionar palabra en widget TEXT en tkinter.
Publicado por: Picuino en 09 de Mayo de 2022, 11:55:22
 ((:-)) ((:-))
Mucho ánimo Daniel. A veces es tedioso encontrar el código adecuado para conseguir lo que uno quiere, pero cuando se consigue es todo un triunfo.
Saludos.
Título: Re:Seleccionar palabra en widget TEXT en tkinter.
Publicado por: Daniel1952 en 09 de Mayo de 2022, 15:19:27
Hola, ¿cómo están?, tal cual Picuino, hay momentos que si no haría
más de 30 años que estudio/practico control mental, habría comprado
muchos teclados, pero como vos decís cuando logras algo que te costó
es como un triunfo muy enriquecedor, sigamos adelante.-
PD: si en algún momento te surgen dudas o alguien te consulta sobre
el widget TEXT tengo una página muy interesante que los puede ayudar.-

Slds. Daniel ☕☕☕