Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: El mas antiguo en 16 Octubre 2022, 20:11 pm



Título: Seleccionar palabras con espacios en widget TEXT en tkinter…
Publicado por: El mas antiguo en 16 Octubre 2022, 20:11 pm
Hola gente, ¿cómo están?, demasiado tiempo practicando y no logro
encontrar la solución.

Dejo algunos ejemplos:
«from collections import Counter»
Si arrastro el mouse del inicio al final de «from» ok
Si arrastro el mouse del inicio al final de «from collections» copia solamente «collections»
lo que necesito es que copie el total de lo seleccionado.-
En cuanto al «doble clic» no me hace falta, por lo menos en este programa…
Lo que ocurre también es que seleccionar todo lo tengo implementando
correctamente, pero hay texto que debo extraer solo una parte.-

Código
  1. def copiar_al_portapapeles(t1, muestra_codigo):
  2.    inicio = muestra_codigo.index("insert-1c wordstart")
  3.    final  = muestra_codigo.index("insert -1c wordend")
  4.    texto = muestra_codigo.get(inicio, final)
  5.    print(texto)
  6.    clib.copy(texto)
  7.  

Desde ya gracias por el tiempo que le dediquen, gracias.-
Slds. Daniel ☕☕☕


Título: Re: Seleccionar palabras con espacios en widget TEXT en tkinter…
Publicado por: reymosquito en 17 Octubre 2022, 00:17 am
hola:

1) en mi caso no soy adivino, así que no tengo la menor idea que son los parámetros que le pasas a la función:
Código
  1. def copiar_al_portapapeles(t1, muestra_codigo):

2)un posible error de lógica, ya que estás limitando lo copiado a palabras.
¿y si de "from collections import Counter" el usuario quería copiar rom collect o port count?, ¿lo querés obligar a que seleccione totalmente las palabras?

3)no es ni por casualidad la mejor forma la que intentas aplicar, hay varias, una con la propia de tkinter y otra con bibliotecas externas, pero vamos con la propia.
no me gusta, salvo excepciones dejar código suelto y no facilmente verificable para el lector,así que implemento un ejemplo funcional sin parámetros en la función, agregalos vos cuando los necesites.

4)tampoco sé como llamás a la función así que implemente un botón.

5)código verificable

Código
  1. #-*- coding: utf  -8 -*-
  2. import tkinter as tk
  3. ventana = tk.Tk()
  4. ventana.geometry("400x350")  
  5.  
  6. def copia():
  7.    try:
  8.        if t1.selection_get():
  9.            data=t1.selection_get()
  10.            print(data)# esto es inncesario, está solo para que se vea lo copiado
  11.            ventana.clipboard_clear()
  12.            ventana.clipboard_append(data)
  13.            return data  
  14.    except: pass
  15.  
  16.  
  17. t1 = tk.Text(ventana,font=20,height=13,width=42)
  18. t1.insert("end","from collections import Counter")
  19. t1.place(x=0,y=0)
  20.  
  21. boton=tk.Button(ventana,text='Copiar',command=copia,font=20,bg='lightblue')
  22. boton.place(x=0,y=300)
  23.  
  24. ventana.mainloop()
  25.  
  26.  
  27.  


Título: Re: Seleccionar palabras con espacios en widget TEXT en tkinter…
Publicado por: El mas antiguo en 17 Octubre 2022, 01:00 am
«En mi caso no soy adivino…» me hago cargo y reconozco que mostré un código
que solamente yo podría entender, pero tiene mucho que ver con el código que
dejo a continuación(justo en el momento que lo probé y lo iba a subir estaba en eso
cuando leí «reymosquito y 134 Visitantes…», no podía perderme tu ayuda).-

Código
  1. def copiar_al_portapapeles(muestra_codigo):
  2.    texto = muestra_codigo.get("sel.first", "sel.last")
  3.    print(texto)
  4.    clib.copy(texto)

Si te parece que ves algo que pueda proporcionar algún error, espero tu comentario.-
Lo tuyo funciona de maravillas, muchas gracias

Ahora lo implementé así:

Código
  1. def copiar_al_portapapeles(muestra_codigo):
  2.    try:
  3.        texto = muestra_codigo.get("sel.first", "sel.last")
  4.    except:
  5.        texto = muestra_codigo.get("1.0", "end")
  6.  
  7.    clib.copy(texto)

Slds. Daniel ☕☕☕