0

我试图每 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
4

1 回答 1

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的第二次为零,因此永远不会进入循环。__timerself.counter

于 2012-10-29T23:33:12.980 回答