I draw an oval into a canvas which works perfect also it show color red and the loops runs fine too cause I can see the print. Its supposed to change the color ever 1000ms. But
The problem you are having is that you are creating the canvas on every iteration, and packing it below all of the other canvases. When you say the object color isn't changing, that's because you are observing the first canvas you created; the color is changing for the most recently created canvas but it is off screen.
Change your code to create a single canvas and your code will otherwise work just fine. For example:
import Tkinter as tk
class App(tk.Tk):
def __init__(self):
tk.Tk.__init__(self)
self.frame_Light = tk.Frame(self, background="bisque")
self.frame_Light.pack(side="top", fill="both", expand=True)
self.light_on = True
self.canvas = tk.Canvas(self.frame_Light)
self.canvas.create_oval(10, 10, 30, 30, fill="yellow", tags="light")
self.canvas.pack(side="top", fill="both", expand=True)
self.draw_light()
def draw_light(self):
if self.light_on:
self.canvas.itemconfig("light", fill="blue")
self.light_on = False
print "on"
else:
self.canvas.itemconfig("light", fill="red")
self.light_on = True
print "of"
self.after(1000, self.draw_light)
app = App()
app.mainloop()
You are using itemconfig incorrectly; it takes an item, not a tag.
Try find_withtag to get all items tagged "light", then use itemconfig
on that.
You should also pay attention to what Bryan Oakley said. Right now you're creating a new canvas and oval every time. Better place the first three lines of this method elsewhere where they aren't repeated.