2012-10-29 72 views
0

我试图每1秒更改一个矩形的颜色,并且由于某种原因只使用最后一种颜色。这两者之间根本不使用。我在哪里做错了?这里是我的代码 -方法不工作后的tkinter(Python)

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

东西的初始颜色是什么? (在红色之前)。它是灰色的吗?如果是,那么我认为这可能是点击没有被调用...放入一些调试打印语句,看看是否有东西被调用,当你认为它应该是 – Sheena

+0

这是一个蓝色 – Andrew

回答

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为零,因此该循环从不输入。

+0

你是对的。我的意思是改变蓝色。但是我发现由于某些原因,循环内部的定时器方法无法按照我想要的方式工作。我结束了使用计时器函数本身的递归循环。 – Andrew

+0

@Andrew:我已经更新了我的回答,以解释为什么它不起作用。 –