以下程序给出错误消息:
"RuntimeError: maximum recursion depth exceeded while calling a Python object".
原因是self.after
。在
当我在计算函数中创建一个while true
循环时,它工作得很好,但是我想用一个self.after
来引起循环,这是我在与Tkinter一起阅读它的方式。如有任何建议,我们将不胜感激。在
import Tkinter as tk
import ttk
import time
class App(tk.Tk):
def __init__(self):
self.root=tk.Tk()
self.var1=tk.StringVar()
self.i=0
def Calculation(self):
# complex calculations that last 30 minutes in total
self.i+=1
self.var1.set(str(self.i))
self.root.update()
self.after(100, self.Calculation)
def Gui(self):
your_label=tk.Label(self.root,textvariable=self.var1).pack()
A=App()
A.Gui()
A.Calculation()
递归是由您的}引起的。除此之外,
App
类派生自tk.TK
而不是{__init__()
方法用self.root=tk.Tk()
语句创建它自己基类的第二个实例,而不是像应该那样调用基类的__init__()
方法。在这种情况下,这尤其麻烦,因为tk.TK
类的一个实例是Tk的Toplevel
小部件,它包含Tcl解释器,并且通常只存在其中一个。在这里有一些东西可以改变基类并完成我认为您正在尝试以适当的方式完成的事情。在这篇文章中,我纠正、修改和简化了其他一些事情,特别是使代码符合PEP8 style guidelines。在
所以我做了一点重写,去掉了单独的Gui函数,但我认为这应该能满足您的需要。在
相关问题 更多 >
编程相关推荐