Изменение цвета фона с течением времени в tkinter (например, анимация) - PullRequest
0 голосов
/ 17 января 2020

Я хочу изменить цвет фона с течением времени (например, красный -> 0,5 секунды позже -> синий, как анимация)

Я пробовал вот так. но я не хотел, и он сразу же вышел черным.

Я поставил основной l oop впереди, но пока он не работал. что мне делать?

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

Ответы [ 2 ]

0 голосов
/ 17 января 2020

Вы должны использовать функцию, вызванную методом after (), чтобы изменить цвет, а затем в этой функции запланировать еще один вызов. Ниже показан один из способов. Вместо того, чтобы что-то делать, затем откладывать, затем делать что-то еще, мы запускаем mainl oop, а затем, после задержки, делаем что-то и настраиваем еще один отложенный вызов.

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 голосов
/ 17 января 2020

Вы можете использовать after() для планирования задачи по изменению цвета:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...