Pourquoi le programme ne se ferme-t-il pas après l'animation de fondu ?

Aug 16 2020

Je suis nouveau sur python et j'ai eu cette idée sur la façon de faire disparaître la page en contrôlant les wm_attributes de mon programme GUI. J'ai créé ce code qui diminue la quantité de 'a' de 0,1 à chaque itération, puis le programme se met en veille pendant 0,1 seconde pour créer cet effet de fondu. Une fois la page complètement transparente, je lui ai dit de détruire root. Cependant, l'animation de fondu fonctionne parfaitement mais la fenêtre se fige et ne se ferme pas une fois l'animation terminée. Qu'est-ce que je fais de mal ici ? Voici mon code :

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

Réponses

3 MasoudRahimi Aug 16 2020 at 13:26

Dans votre whileboucle, la avariable n'atteindra jamais la 0valeur exacte et donc votre boucle ne se terminera jamais. Vous devez soit vérifier si aest positif, soit utiliser une valeur entière pour la soustraction.

Python utilise l'arithmétique binaire à virgule flottante. Vous pouvez trouver plus d'informations ici .

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