¿Por qué el programa no se cierra después de la animación de desvanecimiento?

Aug 16 2020

Soy nuevo en python y se me ocurrió esta idea sobre cómo hacer que la página se desvanezca controlando los atributos wm_attributes de mi programa GUI. Hice este código que disminuye la cantidad de 'a' en 0,1 en cada iteración, luego el programa se duerme durante 0,1 segundos para crear este efecto de desvanecimiento. Después de que la página fuera completamente transparente, le dije que destruyera la raíz. Sin embargo, la animación de desvanecimiento funciona perfectamente, pero la ventana se congela y no se cierra después de que finaliza la animación. ¿Qué estoy haciendo mal aquí? Aquí está mi código:

from tkinter import *
import time


root = Tk()


def animation():
    a = 1
    while a != 0:
        a -= 0.1
        root.wm_attributes("-alpha", a)
        time.sleep(0.1)
    root.destroy()


btn = Button(root, text='Fade out', command=animation)
btn.pack()
root.mainloop()

Respuestas

3 MasoudRahimi Aug 16 2020 at 13:26

En su whileciclo, la avariable nunca alcanzará el 0valor exacto y, por lo tanto, su ciclo nunca terminará. Debe verificar si aes positivo o usar un valor entero para restar.

Python usa aritmética binaria de coma flotante. Puede encontrar más información aquí .

from tkinter import *
import time


root = Tk()


def animation():
    a = 1
    while a > 0:
        a -= 0.1
        root.wm_attributes("-alpha", a)
        time.sleep(0.1)
    root.destroy()


btn = Button(root, text='Fade out', command=animation)
btn.pack()
root.mainloop()