Mengapa program tidak ditutup setelah animasi fade?

Aug 16 2020

Saya baru mengenal python dan saya mendapatkan ide tentang cara membuat halaman memudar dengan mengontrol wm_attributes dari program GUI saya. Saya membuat kode ini yang mengurangi jumlah 'a' sebesar 0,1 setiap iterasi kemudian program tidur selama 0,1 detik untuk membuat efek fade ini. Setelah halaman benar-benar transparan, saya menyuruhnya untuk menghancurkan root. Namun, animasi fade bekerja dengan sempurna tetapi jendela membeku dan tidak menutup setelah animasi selesai. Apa yang saya lakukan salah di sini? Ini kode saya:

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

Jawaban

3 MasoudRahimi Aug 16 2020 at 13:26

Dalam whileloop Anda , avariabel tidak akan pernah mencapai nilai yang tepat 0dan dengan demikian loop Anda tidak akan pernah berakhir. Anda juga perlu memeriksa apakah apositif atau menggunakan nilai bilangan bulat untuk mengurangi.

Python menggunakan aritmatika floating-point biner. Anda dapat menemukan info lebih lanjut di sini .

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