擅长:python、mysql、java
<p>您没有为一个有效的示例解决方案提供足够的代码,但我相信问题是您用错误的参数调用了<code>.after()</code>方法。第一个参数必须是<em>整数</em>,即调用前的毫秒数,而不是浮点值。第二个参数需要是一个<em>函数,在延迟之后调用</em>,而不是<em>调用一个</em>函数。解决这些问题,并稍微简化您的示例,我希望得到如下结果:</p>
<pre><code>def draw_rotating_gear(self, px1, py1, r):
self.rotation_from_normal = self.rotation_from_normal + self.rpm
self.location.delete("all")
# rotates point px1, py1 n times around to form a circle.
for i in range(0, self.n):
angle = (math.radians(self.rotation_from_normal + 360/self.n * i))
qx = (self.ox + math.cos(angle) * (px1 - self.ox) - math.sin(angle) * (py1 - self.oy))
qy = (self.oy + math.sin(angle) * (px1 - self.ox) + math.cos(angle) * (py1 - self.oy))
x0 = qx - r
y0 = qy - r
x1 = qx + r
y1 = qy + r
self.location.create_oval(x0, y0, x1, y1, fill="black")
self.location.update()
self.location.after(100, lambda px1=qx, py1=qy, r=r: self.draw_rotating_gear(px1, py1, r))
</code></pre>
<p>(由于没有足够的代码上下文来处理,我可能向<code>lambda</code>调用传递了错误的变量。)您得到的递归错误是由于<code>.after()</code>的第二个参数不正确造成的,即由于编程错误而导致的错误递归。你知道吗</p>