14

我正在尝试模拟一个美国交通信号灯,矩形上有 3 个圆圈,全部绘制在一组画布上。模拟应该通过按以下顺序每 2 秒更改一次显示的光来反映“动画”:绿色 > 黄色 > 红色 > 绿色,以此类推。

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

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

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

4

1 回答 1

31

是的,您应该能够使用 更改画布的设置config()

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

基于 tkinterbook 的示例:

item = canvas.create_line(xy, fill="red")

canvas.coords(item, new_xy) # change coordinates
canvas.itemconfig(item, fill="blue") # change color
于 2012-10-20T19:10:22.420 回答