2017-04-13 53 views
1

我试图在窗口启动后在tkinter中更改颜色的圆圈。我看了at this的问题,并且我知道如何在陈述变量之后改变颜色。我试图制作一个交通信号灯(就像我看到的问题中的人一样),但在屏幕出现后我无法更新颜色更改。这是我迄今为止在tkinter启动后更改对象的颜色

root = tk.Tk() 
canvas = tk.Canvas(root) 
light_1 = canvas.create_oval(*coordinates here*, fill='green') 
root.mainloop() 

,并改变颜色使用canvas.itemconfig(light_1, fill='blue')

,我不能只是做一个time.sleep(1)因为那时root.mainloop()只达到后,我改变颜色。它没有视觉反馈改变

+0

用户的方法'root.after(1000,FOO)',而不是'time.sleep'?或者有一个按钮执行该功能..? (请注意,时间以毫秒为单位) – arrethra

回答

3

你不能在tkinter代码中的任何地方使用time.sleep(),因为它阻止了tkinter主循环的运行。该解决方案是使用after方法的代码添加到Tkinter的主循环:

def change_color(): 
    canvas.itemconfig(light_1, fill='blue') 

root = tk.Tk() 
canvas = tk.Canvas(root) 
light_1 = canvas.create_oval(*coordinates here*, fill='green') 
root.after(1000, change_color) # 'after' uses milliseconds, so 1,000 = 1 second 
root.mainloop() 
+0

这看起来像我正在寻找的确切的东西。我现在无法测试它,但我相信它会起作用!谢谢! – Goalieman