Saya ingin mengubah warna latar belakang dari waktu ke waktu (Misalnya merah-> 0,5 detik kemudian-> biru, seperti animasi)

Saya mencoba seperti ini. tapi tidak saya inginkan, dan segera keluar hitam.

Saya meletakkan loop utama di depan, tetapi tidak berhasil sampai. apa yang harus saya lakukan?

import tkinter

window=tkinter.Tk()
window.title("COLOR")
window.geometry("640x400+100+100")
window.resizable(False, False)

window.configure(bg="red")
window.after(50)
window.configure(bg="blue")
window.after(50)
window.configure(bg="green")
window.after(50)
window.configure(bg="black")
window.after(50)

window.mainloop()
0
kimhanuu 17 Januari 2020, 17:58

2 jawaban

Jawaban Terbaik

Anda harus menggunakan fungsi yang dipanggil melalui metode after() untuk mengubah warna dan kemudian dalam fungsi itu, jadwalkan panggilan lain. Berikut ini menunjukkan salah satu cara. Alih-alih melakukan sesuatu, lalu menunda, lalu melakukan sesuatu yang lain, kami memulai mainloop dan kemudian setelah penundaan kami melakukan sesuatu dan mengatur panggilan tertunda lainnya.

import sys
import tkinter as tk

def change(delay, frame, sequence, index):
    index = (index + 1) % len(sequence)
    frame.configure(background=sequence[index])
    frame.after(delay, lambda: change(delay, frame, sequence, index))

def main(argv=None):
    sequence = ['black', 'grey40', 'grey60', 'grey80', 'white', 'grey80', 'grey60', 'grey40']
    root = tk.Tk()
    frame = tk.Frame(root, width=200, height=200, background="red")
    frame.pack(fill=tk.BOTH, expand=True)
    change(100, frame, sequence, -1)
    root.mainloop()
    return 0

if __name__ == '__main__':
    sys.exit(main(sys.argv))
0
patthoyts 17 Januari 2020, 15:13

Anda dapat menggunakan after() untuk menjadwalkan tugas untuk mengubah warna:

import tkinter as tk

window = tk.Tk()
window.title('COLOR')
window.geometry('640x480+100+100')
window.resizable(0, 0)

def change_color(i=0):
    if i < 4:
        colors = ('red', 'blue', 'green', 'black')
        window.config(bg=colors[i])
        window.after(500, change_color, i+1)

change_color()
window.mainloop()
0
acw1668 17 Januari 2020, 15:12