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終了するとゼロに設定されます。__timer1 秒後に呼び出される2 回目self.counterはゼロであるため、ループには決して入りません。

于 2012-10-29T23:33:12.980 に答える