【发布时间】:2017-12-26 12:40:59
【问题描述】:
我正在尝试在 Tkinter 中创建一个计时器。这是我的工作示例:
# GUI packages
from Tkinter import *
from ttk import *
from tkMessageBox import *
sec = 0
#_
class RunMeasurement(Tk):
def __init__(self, *args, **kwargs):
Tk.__init__(self, *args, **kwargs)
Tk.style = Style()
Tk.title = 'Data sheet creation'
self.__timeLabel = None
myFrame = Frame(self)
myFrame.pack(fill='both')
self.__timeLabel = Label(myFrame)
timeButton = Button(myFrame, text='start', command=self.Tick)
timeButton.grid(row=0, column=0)
self.__timeLabel.grid(row=0, column=1)
def Tick(self):
global sec
sec += 1
self.__timeLabel['text'] = sec
self.__timeLabel.after(1000, self.Tick)
if __name__ == '__main__':
app = RunMeasurement()
app.mainloop()
但是如果我尝试稍微改变一下,例如每次以这种方式计数 2 或 3(仅更改了之前代码的对应部分):
...
timeButton = Button(myFrame, text='start', command=lambda: self.Tick(3))
...
def Tick(self, index):
...
sec += index
...
self.__timeFrame.after(1000, self.Tick(index))
我很快就明白了(见图)。然后是 RuntimeError:
RuntimeError: maximum recursion depth exceeded while calling a Python object
问题:如何处理这个错误?以及如何在 Tkinter 中创建这样的计时器?
【问题讨论】:
-
这类似于调用函数而不是传递函数作为按钮命令参数,如this question
-
FWIW,你可能会觉得this answer很有趣。