我试图每1秒更改一个矩形的颜色,由于某种原因,只使用最后一种颜色。介于两者之间根本不使用。我哪里做错了?这是我的代码 -
class app():
def __init__(self):
self.root = Tk()
self.root.minsize(500, 500)
self.root.maxsize(500, 500)
self.counter = 4
self.color = ["red","green","yellow","grey"]
self.mainframe = Canvas(self.root, width=400, height=200)
self.blue = self.mainframe.create_rectangle(20,20,120,60,fill='blue',width=0)
self.mainframe.pack()
Button(self.root,text="press",command=self.click).pack()
self.root.mainloop()
def click(self):
self.root.after(1000,self.__timer)
def __timer(self):
if self.counter > 0:
for i in range(self.counter):
self.mainframe.itemconfigure(self.blue_button,fill=self.color[i])
self.root.after(1000,self.__timer)
self.counter -= 1
答案 0 :(得分:1)
您的计时器功能正在尝试设置self.blue_button
的颜色,但没有此类对象。您打算更改self.blue
的颜色吗?
另外,你有一个逻辑问题。看看这段代码:
if self.counter > 0:
for i in range(self.counter):
self.mainframe.itemconfigure(self.blue_button,fill=self.color[i])
self.root.after(1000,self.__timer)
self.counter -= 1
注意你在循环中递减self.counter
的方式。因此,第一次调用__timer
时,它会在self.counter
完成后将其设置为零。第二次__timer
稍后调用self.counter
时,{{1}}为零,因此永远不会输入循环。