为什么程序在淡入淡出动画后没有关闭?

Why isn't the program closing after the fade animation?

我是 python 的新手,我想到了如何通过控制我的 GUI 的 wm_attributes 让页面淡出程序。我制作了这段代码,每次迭代将 'a' 的数量减少 0.1,然后程序进入休眠状态 0.1 秒以创建此淡入淡出效果。页面完全透明后,我告诉它销毁 root。但是,淡入淡出动画效果很好,但 window 冻结并且在动画完成后不会关闭。我在这里做错了什么? 这是我的代码:

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

在您的 while 循环中,a 变量永远不会达到准确的 0 值,因此您的循环永远不会结束。您要么需要检查 a 是否为正数,要么使用整数值进行减法。

Python 使用二进制 floating-point 算法。您可以找到更多信息 here.

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