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