海龟移动事件产生测试程序_root.event_generate

海龟移动事件产生测试程序_root.event_generate

"""
   海龟移动事件产生测试程序_root.event_generate
   turtle基于tkinter,所以调用root的event_generate能指挥鼠标移动,当然按键等都可以,
   这样的海龟编程可是有趣多了,潘朵拉盒子打开了,会一发不可收拾。
   这个程序在运行后,海龟会随机移动,然后鼠标指针过一会儿会瞄准它,让它消失!
   由于速度太快,所以录的gif看不出来。示例为硬编码,只为学习,没搞太抽象。
"""
import random
import turtle

def mouse_pos():
    """获取相对于海龟屏幕的鼠标指针坐标,和屏幕的缩放参数scale无关。"""      
    abs_coord_x = root.winfo_pointerx() - root.winfo_rootx()
    abs_coord_y = root.winfo_pointery() - root.winfo_rooty()
    x =  abs_coord_x - 400         # 减去屏幕宽度一半
    y =  300 - abs_coord_y
    x, y = (x-3),(y+3) 
    return (x,y)

def die():
    if turtle.fillcolor()!='red':
       turtle.fillcolor('red')
       turtle.ontimer(die,100)
    else:
        turtle.ht()

def wait():
    # 获取鼠标指针在画布上的坐标(基于海龟坐标系)
    mx,my = mouse_pos()
    if ((mx-turtle.xcor())**2 + (my-turtle.ycor())**2)**0.5>10:
        turtle.ontimer(wait,100)
    else:
        die()

    
turtle.setup(800,600)
turtle.shape('turtle')
turtle.shapesize(2)
cv = turtle.getcanvas()
root = turtle.getscreen()._root

while 1:
    turtle.seth(random.randint(1,360))
    turtle.fd(random.randint(10,100))
    if random.randint(1,20)==1:
      left = turtle.xcor()  + 400
      top = 300 - turtle.ycor()
      root.event_generate('', warp=True, x=left, y=top)
      wait()
      break


李兴球

李兴球的博客是Python创意编程原创博客