<p>碰巧我有一个<a href="https://stackoverflow.com/questions/26083115/how-to-make-items-draw-at-the-same-time-in-python-using-turtle/40941423#40941423">four inner planet simulator left over from answering another SO question</a>,我们可以把<code>onclick()</code>方法插入其中,看看这对移动的海龟有多有效:</p>
<pre><code>""" Simulate motion of Mercury, Venus, Earth, and Mars """
from turtle import Turtle, Screen
planets = {
'mercury': {'diameter': 0.383, 'orbit': 58, 'speed': 7.5, 'color': 'gray'},
'venus': {'diameter': 0.949, 'orbit': 108, 'speed': 3, 'color': 'yellow'},
'earth': {'diameter': 1.0, 'orbit': 150, 'speed': 2, 'color': 'blue'},
'mars': {'diameter': 0.532, 'orbit': 228, 'speed': 1, 'color': 'red'},
}
def setup_planets(planets):
for planet in planets:
dictionary = planets[planet]
turtle = Turtle(shape='circle')
turtle.speed("fastest") # speed controlled elsewhere, disable here
turtle.shapesize(dictionary['diameter'])
turtle.color(dictionary['color'])
turtle.penup()
turtle.sety(-dictionary['orbit'])
turtle.pendown()
dictionary['turtle'] = turtle
turtle.onclick(lambda x, y, p=planet: on_click(p))
revolve()
def on_click(planet):
p = screen.textinput("Guess the Planet", "Which planet is this?")
if p and planet == p:
pass # do something interesting
def revolve():
for planet in planets:
dictionary = planets[planet]
dictionary['turtle'].circle(dictionary['orbit'], dictionary['speed'])
screen.ontimer(revolve, 50)
screen = Screen()
setup_planets(planets)
screen.mainloop()
</code></pre>
<p>一般来说,它工作得很好。有时当<code>textinput()</code>对话框面板可见时,行星会停在它们的轨道上,其他时候则看不到。在</p>
<p><a href="https://i.stack.imgur.com/xo6qC.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/xo6qC.png" alt="enter image description here"/></a></p>