你可以在创建后更改Canvas对象的属性吗?

时间:2012-10-20 19:07:19

标签: python tkinter tkinter-canvas

我正在尝试模拟一个美国交通信号灯,一个矩形上有3个圆圈,所有这些都是在一套Canvas上绘制的。假设模拟通过以下列顺序每2秒改变显示哪一个光来反映“动画”:绿色>黄色>红色>绿色等永远。

我能想到的唯一方法是使用canvas.move(),canvas.after(),canvas.update()模式移动填充的椭圆形对象,一次叠加一个未填充的圆。我已经得到了逻辑,以适当的速度和正确的顺序移动一个圆圈。问题是,我只是实例化了一个充满“绿色”的圆圈,但我无法使用此方法将其更改为“黄色”或“红色”。看看canvas.delete(“填充”)似乎很愚蠢,并且每隔2秒就会在一个新的地方重新绘制一个不同的填充,因为这对于这样一个简单的程序来说有很多工作要做。

问题1:有没有办法可以使用某种方法或其他方法随意改变我填充的Canvas对象的fill选项?

问题2:我是否错误地接近了这种情况?有没有更好的方法来模拟这个?

1 个答案:

答案 0 :(得分:19)

是的,您应该可以使用config更改画布的设置。

同样,使用itemconfig更改画布上的项目。这确实需要您保存项目的句柄或标记它们。

来自tkinterbook的例子:

i = w.create_line(xy, fill="red")

w.coords(i, new_xy) # change coordinates
w.itemconfig(i, fill="blue") # change color