Python 在tkinter中随时间改变背景颜色(如动画)

Python 在tkinter中随时间改变背景颜色(如动画),python,tkinter,Python,Tkinter,我想随时间改变背景色 (例如红色->0.5秒后->蓝色,如动画) 我试过了。但我不想要,它马上就变黑了 我把主回路放在前面,但直到。 我该怎么办 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.c

我想随时间改变背景色 (例如红色->0.5秒后->蓝色,如动画)

我试过了。但我不想要,它马上就变黑了

我把主回路放在前面,但直到。 我该怎么办

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()
您可以使用
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()
将tkinter作为tk导入
window=tk.tk()
window.title('COLOR')
窗口几何体('640x480+100+100')
窗口。可调整大小(0,0)
def更改颜色(i=0):
如果i<4:
颜色=(‘红色’、‘蓝色’、‘绿色’、‘黑色’)
window.config(bg=colors[i])
窗口后(500,更改颜色,i+1)
改变颜色()
window.mainloop()

您应该使用通过after()方法调用的函数来更改颜色,然后在该函数中安排另一个调用。下面显示了一种方法。而不是做一些事情,然后延迟,然后做一些其他的事情,我们启动主循环,然后在延迟之后我们做一些事情,设置另一个延迟调用

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

下面是一个如何配置重复计时器的示例:您可以使用universal widget方法在tkinter中的特定延迟后调度要调用的函数。这里有很多答案显示了如果你搜索它们,如何使用它们;在调用window.mainloop()之前,不会发生任何事情,并且不会在50毫秒后调用
window.after()
函数,因此当4个计时器中的每一个都过期时(同时)
window.config(bg=_from_rgb(tuple(colors)))窗口不会发生任何事情。在(500,change_color)
之后,我这样做了,但它不起作用(颜色以列表的形式出现:例如:[255,0255])\u from_rgb()是一个将rgb转换为tkinter的函数。)在
window.config(bg=_from_rgb(tuple(colors))
,是
colors
的单个列表,如
[255,0255]
,还是整个颜色列表,如
[[255,0255],…],…],…]
?如果是后者,则应使用
颜色[i]
。另外,您错过了
窗口中的一个参数。在(500,更改颜色)
之后,它应该是
窗口。在(500,更改颜色,i+1)
之后,它是[255,0255],然后我想知道
不起作用的意思是什么。它没有显示正确的颜色,或者它没有每半秒改变一次颜色?_rgb()
函数的
\u的实现是什么?