Почему программа не закрывается после затухания анимации?

Aug 16 2020

Я новичок в python, и мне пришла в голову идея о том, как заставить страницу исчезать, управляя wm_attributes моей программы с графическим интерфейсом. Я сделал этот код, который уменьшает количество «а» на 0,1 на каждой итерации, после чего программа переходит в спящий режим на 0,1 секунды, чтобы создать этот эффект затухания. После того, как страница стала полностью прозрачной, я сказал ей уничтожить root. Однако анимация затухания работает отлично, но окно зависает и не закрывается после завершения анимации. Что я здесь делаю не так? Вот мой код:

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

Ответы

3 MasoudRahimi Aug 16 2020 at 13:26

В вашем whileцикле aпеременная никогда не достигнет точного 0значения, и, следовательно, ваш цикл никогда не закончится. Вам нужно либо проверить, aявляется ли оно положительным, либо использовать целочисленное значение для вычитания.

Python использует двоичную арифметику с плавающей запятой. Вы можете найти больше информации здесь .

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