回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在创建一个围绕一个中心点旋转几个点的应用程序。其目的是使用直线/圆弧连接每个点,并使点/(后续绘图)围绕中心点旋转。你知道吗</p>
<p>我试图通过一种方法来实现这一点:每次调用该方法时,将每个点旋转给定的量,然后使用<code>for</code>循环围绕中心点分布每个点<code>n</code>次。你知道吗</p>
<p>(为了将来的使用,我还需要一些tkinter小部件在代码旁边运行,例如获取用户输入的条目。)</p>
<p>我当前的代码只是为每个点画一个圆,而不是连接它们。有几件事我现在还不明白:</p>
<ol>
<li><p>我的代码运行了很短一段时间,然后以<code>Error: maximum recursion depth exceeded.</code>结束—用<code>.delete</code>清除画布是否不好?</p></li>
<li><p><code>.after</code>函数的值似乎没有任何影响,因此使用<code>time.sleep</code>。</p></li>
</ol>
<p>(我还使用了<code>while True:</code>循环来运行早期版本中的代码,但我了解到在GUI事件循环中运行无限循环是一种不好的做法。我编辑它是因为闪烁)</p>
<p>以不同的方式构造代码会更好吗?
对不起,我的术语有误,邮件/代码又乱又长,我是一个非英语python的新学生。你知道吗</p>
<pre><code>class Create_gear:
def __init__(self, location, ox, oy, rpm, n):
self.location = location
self.ox = ox
self.oy = oy
self.rpm = rpm
self.n = n
self.rotation_from_normal = 0
#Rotates point px1, py1 by value of "rpm" each time method is called.
def draw_rotating_gear(self, px1, py1, px2, py2, 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()
time.sleep(0.01)
self.location.after(1000000000, self.draw_rotating_gear(480, 200, 500, 300, 5))
</code></pre>