Por que o programa não está fechando após a animação desaparecer?

Aug 16 2020

Sou novo em python e tive a ideia de como fazer a página desaparecer controlando os wm_attributes do meu programa GUI. Eu fiz este código que diminui a quantidade de 'a' em 0,1 a cada iteração, então o programa vai dormir por 0,1 segundo para criar este efeito de fade. Depois que a página ficou completamente transparente, eu disse para destruir o root. No entanto, a animação de fade funciona perfeitamente, mas a janela congela e não fecha depois que a animação é concluída. O que eu estou fazendo errado aqui? Aqui está o meu 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()

Respostas

3 MasoudRahimi Aug 16 2020 at 13:26

Em seu whileloop, a avariável nunca atingirá o 0valor exato e, portanto, seu loop nunca terminará. Você precisa verificar se aé positivo ou usar um valor inteiro para subtrair.

Python usa aritmética de ponto flutuante binário. Você pode encontrar mais informações aqui .

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()