Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Doble-clic para obtener fila/columna inicio/final
#1
Hola Francisco, hola gente, buen día.-
Te cuento lo que me pasa, quiero hacer lo mismo(que hace este programa)
pero en un solo paso, o sea al hacer un doble-clic, obtener la fila/columna
inicio/final, desconozco como se lanza el evento, pero me imagino que al hacer
doble-clic va primero al método y encuentra que no hay nada seleccionado.-
¿se podrá?.- 


Código:
#-------------------------------------------------------------------------------
# Name:        módulo1
# Purpose:     Marcar ubicación fila/columna(inicio y final)
#
# Author:      Daniel
#
# Created:     11/05/2022
# Copyright:   (c) Daniel 2022
# Licence:     <your licence>
#-------------------------------------------------------------------------------
import tkinter as tk
from tkinter import ttk, messagebox
from functools import partial

def obtenerSeleccion(texto, event):
    # Obtener los índices del inicio y fin de la selección
    try:
        first = texto.index(tk.SEL_FIRST)
    except:
        messagebox.showinfo(" Información", " No tiene ninguna palabra seleccionada...")
    else:
        last  = texto.index(tk.SEL_LAST)
        seleccion = texto.get(first, last)
        print(f" Palabra seleccionada <{seleccion}> inicio --> {first} final --> {last}")


def main():
    v_principal = tk.Tk()
    v_principal.title(" Doble clic y seleccionar palabra")
    v_principal.geometry("600x400+500+300")

    texto = tk.Text(v_principal, font=("vardana", 12))
    texto.place(x=5, y=5, width=580, height=300)

    texto.insert(1.0, "Yo soy de Arequito y soy una buena persona")

    texto.bind('<Button-3>', partial(obtenerSeleccion, texto))


    v_principal.mainloop()

if __name__ == '__main__':
    main()
Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder
#2
Hola, Daniel.

Habría que usar el evento <Double-Button-1>, algo así:

Código:
import tkinter as tk
from tkinter import ttk, messagebox
from functools import partial


def obtener_seleccion():
    # Obtener los índices del inicio y fin de la selección
    try:
        first = texto.index(tk.SEL_FIRST)
    except:
        messagebox.showinfo(" Información", " No tiene ninguna palabra seleccionada...")
    else:
        last  = texto.index(tk.SEL_LAST)
        seleccion = texto.get(first, last)
        print(f" Palabra seleccionada <{seleccion}> inicio --> {first} final --> {last}")


def texto_doble_clic(texto, event):
    # Ejecutar obtener_seleccion() luego de que Tk procese
    # el evento doble clic.
    v_principal.after(1, obtener_seleccion)


v_principal = tk.Tk()
v_principal.title(" Doble clic y seleccionar palabra")
v_principal.geometry("600x400+500+300")
texto = tk.Text(v_principal, font=("vardana", 12))
texto.place(x=5, y=5, width=580, height=300)
texto.insert(1.0, "Yo soy de Arequito y soy una buena persona")
texto.bind('<Double-Button-1>', partial(texto_doble_clic, texto))
v_principal.mainloop()

El problema es que si respondemos al evento <Double-Button-1>, nuestra función se va a ejecutar antes de que la palabra se llegue a seleccionar. Para que se ejecute después, hacemos un pequeño truquito con la función after() de Tk, posponiendo la ejecución de obtener_seleccion() para que corra después de que Tk haya tenido tiempo de seleccionar la palabra. Te dejo un artículo sobre after(): https://recursospython.com/guias-y-manua...n-tkinter/.

Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
Hola Francisco, gracias, funciona como lo esperado, creo que
si no fuese por este hilo no me hubiera enterado de la existencia
de la función after(), en casi todos los tutoriales se utiliza time.-
Bueno, la duda que tengo en este momento creo que se las trae,
por el momento no los voy a consultar porque quiero seguir buscando
y buscando, si para dentro de una semana no la encuentro seguramente
me verán dar de alta otro hilo.-

Slds. Daniel ☕☕☕
abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)