Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: El mas antiguo en 27 Octubre 2022, 02:05 am



Título: wait windows para tkinter...
Publicado por: El mas antiguo en 27 Octubre 2022, 02:05 am
Hola gente, ¿cómo están? Bueno ahora hago un cambio de rol,
vengo a traerles un aporte, lo que ocurre es que estuve estudiando
bastante(hace ya mucho tiempo) VFP y en ese lenguaje se utilizaba
muchísimo, pero muchísimo una wait windows y en python por más
que busco no encuentro nada parecido.-
Lo dejo a vuestra consideración y cualquier aporte o crítica será
bien venida.-
 
Código
  1. import tkinter as tk
  2. from tkinter import ttk
  3. from functools import partial
  4.  
  5. def cerrar(*waitVentana):
  6.    waitVentana[0].destroy()
  7.  
  8.  
  9. def posicionarVentana(root):
  10.    ventanaRaiz = root.geometry()
  11.    ventanaRaiz = ventanaRaiz.replace('x', ',')
  12.    ventanaRaiz = ventanaRaiz.replace('+', ',')
  13.    dimPos = ventanaRaiz.split(',')
  14.  
  15.    xInicio = int(dimPos[0]) + int(dimPos[2])
  16.    yAlto = int(dimPos[3]) -50
  17.  
  18.    return xInicio, yAlto
  19.  
  20. def ventanaMensaje(texto, root):
  21.    posicion = posicionarVentana(root)
  22.    mensaje = texto
  23.    waitVentana = tk.Toplevel(root)
  24.    waitVentana.geometry('+%d+%d' % (posicion[0], posicion[1]))
  25.    waitVentana.overrideredirect(1)
  26.    waitVentana.grab_set()
  27.    waitVentana.focus_set()
  28.  
  29.    waitVentana.bind('<Escape>', partial(cerrar, waitVentana))
  30.  
  31.    frame = ttk.Frame(waitVentana)
  32.    frame.pack()
  33.    label = tk.Label(frame, text=mensaje,
  34.        font=("vardana", 14), borderwidth=6, relief="ridge")
  35.    label.pack()
  36.  
  37.    waitVentana.after(5000, waitVentana.destroy)
  38.    frame.after(5000, frame.destroy)
  39.  

Código
  1. def ventanaMensaje(texto, root):

Esta es la función principal y hay que pasarle el texto a mostrar
y el nombre de la ventana que la invoca para darle una posición
relativa.-

Slds. Daniel ☕☕☕


Título: Re: wait windows para tkinter...
Publicado por: TheLonelyPain en 10 Noviembre 2022, 22:45 pm
Hola, se que respondo tarde. :laugh:
Bueno si te refieres como "waitwindos" me imagino que lo que quieres hacer
es que haya por ejemplo un tiempo de delay en la ventana antes de ejecutarse?
Si es asi, python tiene una libreria llamada time y puedes utilizar el modulo
de sleep.
Un ejemplo sencillo seria lo siguiente:
Código
  1. import time # se importa time
  2. sys,stdout.write("HolaMundo")
  3. time.sleep(4) #aqui se definen 4 segundos # se llama time junto a su modulo
  4.  
Podrias replicar lo mismo pero para tu ventana.


Título: Re: wait windows para tkinter...
Publicado por: reymosquito en 11 Noviembre 2022, 09:44 am
TheLonelyPain

Hola, perdón por corregirte , pero no quiero que esa respuesta quede como válida  por si la lee alguien más y pretende aplicarla.
Si bien sleep funciona con python, sleep trae conflictos con tkinter, por eso existe una función propia llamada after.
pongo un ejemplo:

Código
  1. import tkinter as tk
  2.  
  3. def muestra():
  4.    def eliminar_ventana():
  5.        ventana.destroy()
  6.  
  7.    ventana = tk.Toplevel(master=principal)
  8.    ventana.geometry("400x200")
  9.    tk.Label(ventana, text="Esta copia se autodestruirá en 5 segundos").pack()
  10.    ventana.after(5000,eliminar_ventana)
  11.  
  12. principal = tk.Tk()
  13. principal.geometry("200x200")
  14. tk.Button(principal,text='Abrir secundaria', command=muestra).pack()
  15. principal.mainloop()

Saludos.