2017-11-27 14 views
0

私はPythonを初めて使い、トレーニングの目的でsleeptimerを構築したいと考えていました。 私はUbuntuでPython 3.6.3を使用しています。 コンピュータがスリープ状態になるまでに何時間残っているかを示すラベルが必要でした。なぜafter()waitをしないのですか

私はafter()を使用していますが、私はupdateメソッドを呼び出すたびに、それは私がエラーで最大の再帰の深さに達するまで、非常に多くの場合、自分自身を呼び出します。

RecursionError: maximum recursion depth exceeded while calling a Python object

を私はいくつかの理由のために、と思いますafter(1000, self.update)コマンドは、メソッドを再度呼び出す前に1秒間待機しません。また、私は再帰を望んでいませんが、毎秒メソッドを呼び出す...

私が間違っていることを教えてもらえますか?この行で

class Application(Frame): 

    def startTimer(self): 
     self.start = time.time() 
     self.waiting = self.entry.get()*60000 
     self.update() 
     self.after(self.waiting, self.shutdown) 

    def update(self): 
     string = str(int(int(self.waiting/6000) + self.start - time.time())/10) 
     print(string) 
     self.label.config(text = string + " Minuts left") 
     self.after(1000, self.update()) 

    def shutdown(self): 
     print("PSSST!") 

    def createWidgets(self): 
     self.entry = Scale(self, from_=5, to=120, orient=HORIZONTAL, resolution=5) 
     self.label = Label(self,text="time remaining") 

     self.start = Button(self, text="Start", fg="black", 
          command=self.startTimer) 

     self.quit = Button(self, text="QUIT", fg="red", 
           command=root.quit) 

     self.entry.pack(side="top") 
     self.label.pack(side="left") 
     self.start.pack(side="right") 
     self.quit.pack(side="bottom") 

    def __init__(self, master=None): 
     Frame.__init__(self, master) 
     self.pack() 
     self.createWidgets() 

root = Tk() 
app = Application(master=root) 
app.mainloop()` 

答えて

1

self.after(1000, self.update()) 

あなたはすぐにself.update()を呼び出し、self.afterに結果を渡している、self.afterself.update機能を渡していません。これにより、無限再帰が発生します。

+0

ありがとうございました... 「self.after(1000、self.update)」と連携しています – Cohen

関連する問題