Perché il programma non si chiude dopo l'animazione di dissolvenza?

Aug 16 2020

Sono nuovo in Python e mi è venuta questa idea su come far svanire la pagina controllando i wm_attributes del mio programma GUI. Ho creato questo codice che riduce la quantità di "a" di 0,1 a ogni iterazione, quindi il programma va in sospensione per 0,1 secondi per creare questo effetto di dissolvenza. Dopo che la pagina è stata completamente trasparente, le ho detto di distruggere root. Tuttavia, l'animazione della dissolvenza funziona perfettamente ma la finestra si blocca e non si chiude al termine dell'animazione. Cosa sto facendo di sbagliato qui? Ecco il mio codice:

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

Risposte

3 MasoudRahimi Aug 16 2020 at 13:26

Nel tuo whileciclo, la avariabile non raggiungerà mai il 0valore esatto e quindi il tuo ciclo non finirà mai. È necessario verificare se aè positivo o utilizzare un valore intero per la sottrazione.

Python usa l'aritmetica binaria in virgola mobile. Puoi trovare maggiori informazioni qui .

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