Warum schließt sich das Programm nach der Fade-Animation nicht?

Aug 16 2020

Ich bin neu in Python und hatte diese Idee, wie ich die Seite ausblenden kann, indem ich die wm_attributes meines GUI-Programms steuere. Ich habe diesen Code erstellt, der die Menge von 'a' bei jeder Iteration um 0,1 verringert, dann geht das Programm für 0,1 Sekunden in den Ruhezustand, um diesen Fade-Effekt zu erzeugen. Nachdem die Seite vollständig transparent war, sagte ich ihr, sie solle root zerstören. Die Fade-Animation funktioniert jedoch einwandfrei, aber das Fenster friert ein und schließt sich nicht, nachdem die Animation abgeschlossen ist. Was mache ich hier falsch? Hier ist mein 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()

Antworten

3 MasoudRahimi Aug 16 2020 at 13:26

In Ihrer whileSchleife wird die aVariable niemals den genauen 0Wert erreichen und Ihre Schleife wird daher niemals enden. Sie müssen entweder prüfen, ob apositiv ist, oder einen ganzzahligen Wert zum Subtrahieren verwenden.

Python verwendet binäre Gleitkommaarithmetik. Weitere Informationen finden Sie hier .

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