动画矩形的颜色

时间:2019-04-24 06:27:23

标签: python-3.x tkinter

我想在一段时间后更改矩形的颜色。

我尝试了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秒后发生变化。

1 个答案:

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