私は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()`
ありがとうございました... 「self.after(1000、self.update)」と連携しています – Cohen