フェードアニメーションの後でプログラムが閉じないのはなぜですか?
私はPythonを初めて使用し、GUIプログラムのwm_attributesを制御してページをフェードアウトさせる方法についてこのアイデアを思いつきました。反復ごとに「a」の量を0.1ずつ減らすこのコードを作成し、プログラムは0.1秒間スリープ状態になり、このフェード効果を作成します。ページが完全に透明になった後、ルートを破棄するように指示しました。ただし、フェードアニメーションは完全に機能しますが、ウィンドウがフリーズし、アニメーションの完了後にウィンドウが閉じません。私はここで何が間違っているのですか?これが私のコードです:
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
あなたには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()