我想在一段时间后更改矩形的颜色。
我尝试了root.after()方法,但是它不起作用。
import time from tkinter import * def task(): canvas= Canvas() canvas.create_rectangle(0,0,100,100,fill='red') canvas.pack() time.sleep(2) canvas.create_rectangle(0,0,100,100,fill='blue') canvas.pack() time.sleep(2) print("Testing...") root = Tk() canvas = Canvas(root) while(1): task() root.mainloop()
鉴于代码连续运行,并且根窗口会挂起一定时间。矩形颜色应在延迟2秒后发生变化。
答案 0 :(得分:1)
使用time.sleep()
会挂起窗口以及while
循环。使用time.sleep
在tkinter中,我们在函数中使用after(ms)
(毫秒),因此GUI不会挂起。
虽然功能相同,所以我们使用after(ms, callback, args)
函数。
这是您要实现的目标的一个示例。矩形将每1000毫秒(1秒)将其颜色从红色变为蓝色-从蓝色变为红色,依此类推。同样在代码中,您每4秒创建一个新的画布和矩形。我要做的是,在task()
函数外部定义了一个画布和一个矩形,并给该矩形添加了一个标签(tag='rect')
作为参考,通过该标记编辑该矩形的颜色而不创建不必要的项目。希望对您有帮助。
示例:
from tkinter import *
root = Tk()
canvas = Canvas(root)
canvas.pack()
canvas.create_rectangle(0,0,100,100,fill='red', tag='rect')
def task():
l = root.after(1000, task)
if int(l.split('#')[1]) % 2 == 0:
canvas.itemconfig('rect', fill='blue')
else:
canvas.itemconfig('rect', fill='red')
task()
root.mainloop()