方法不工作后的tkinter(Python)

时间:2012-10-29 21:02:26

标签: python tkinter

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

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}}为零,因此永远不会输入循环。