Dlaczego program nie zamyka się po animacji zanikania?

Aug 16 2020

Jestem nowy w Pythonie i wpadłem na pomysł, jak sprawić, by strona zniknęła, kontrolując wm_attributes mojego programu GUI. Zrobiłem ten kod, który zmniejsza wartość „a” o 0,1 w każdej iteracji, a następnie program przechodzi w stan uśpienia na 0,1 sekundy, aby stworzyć efekt zanikania. Gdy strona stała się całkowicie przezroczysta, poleciłem jej zniszczyć root. Jednak animacja zanikania działa idealnie, ale okno zawiesza się i nie zamyka się po zakończeniu animacji. Co ja tu robię źle? Oto mój kod:

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

Odpowiedzi

3 MasoudRahimi Aug 16 2020 at 13:26

W twojej whilepętli azmienna nigdy nie osiągnie dokładnej 0wartości, a zatem twoja pętla nigdy się nie skończy. Musisz albo sprawdzić, czy ajest dodatnia, albo użyć wartości całkowitej do odejmowania.

Python używa binarnej arytmetyki zmiennoprzecinkowej. Więcej informacji znajdziesz tutaj .

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