我们可以深入了解龟的Tk基础以启用’< Motion>‘事件.我将函数转换为设置/取消设置事件看起来像乌龟屏幕的方法,但你可以在单一屏幕实例turtle.Screen()上调用它:
import turtle
def onmove(self, fun, add=None):
"""
Bind fun to mouse-motion event on screen.
Arguments:
self -- the singular screen instance
fun -- a function with two arguments, the coordinates
of the mouse cursor on the canvas.
Example:
>>> onmove(turtle.Screen(), lambda x, y: print(x, y))
>>> # Subsequently moving the cursor on the screen will
>>> # print the cursor position to the console
>>> screen.onmove(None)
"""
if fun is None:
self.cv.unbind('')
else:
def eventfun(event):
fun(self.cv.canvasx(event.x) / self.xscale, -self.cv.canvasy(event.y) / self.yscale)
self.cv.bind('', eventfun, add)
def goto_handler(x, y):
onmove(turtle.Screen(), None) # avoid overlapping events
turtle.setheading(turtle.towards(x, y))
turtle.goto(x, y)
onmove(turtle.Screen(), goto_handler)
turtle.shape('turtle')
onmove(turtle.Screen(), goto_handler)
turtle.mainloop()
我的代码包含一个示例动作事件处理程序,它使乌龟像跟踪激光指针的猫一样跟随光标.无需点击(初始点击除外,以使窗口生效.):