python中的龟 - 试图让乌龟移动到鼠标点击位置并打印其坐标

时间:2013-07-25 16:51:00

标签: python python-3.x turtle-graphics

我正试图通过Python龟获得鼠标位置。一切正常,只是我不能让乌龟跳到鼠标点击的位置。

import turtle

def startmap(): #the next methods pertain to drawing the map
   screen.bgcolor("#101010")
   screen.title("Welcome, Commadore.")
   screen.setup(1000,600,1,-1)
   screen.setworldcoordinates(0,600,1000,0)
   drawcontinents()    #draws a bunch of stuff, works as it should but not really important to the question
   turtle.pu()
   turtle.onclick(turtle.goto)
   print(turtle.xcor(),turtle.ycor())
   screen.listen()

据我所知,“turtle.onclick(turtle.goto)”这一行应该将乌龟发送到我点击鼠标的地方,但事实并非如此。打印线是一个测试,但它只返回我最后发送的位置,名义上(0,650)虽然这没有重大意义。

我尝试在pydoc中查找教程,但到目前为止我还没能成功写出来。

感谢您的帮助。谢谢。

编辑:我需要乌龟去点击位置(完成),但我也需要它来打印坐标。

1 个答案:

答案 0 :(得分:6)

您正在寻找onscreenclick()。这是TurtleScreen的一种方法。 Turtle的{​​{3}}方法指的是鼠标本身的鼠标点击。令人困惑的是,onclick() TurtleScreen方法与其onscreenclick()方法相同。

  

24.5.4.3。使用屏幕事件onclick()

     

turtle.onclick有趣 btn = 1 add =无
  turtle.onscreenclick有趣 btn = 1 add =无

     

参数:

     
      
  • fun - 一个带有两个参数的函数,将使用画布上单击的点的坐标调用
  •   
  • num - 鼠标按钮的编号,默认为1(鼠标左键)
  •   
  • 添加 - True False - 如果 True ,将添加一个新绑定,否则它将替换以前的绑定
  •   
     

fun 绑定到此屏幕上的鼠标单击事件。如果 fun None ,则会删除现有的绑定。

     

名为screen的TurtleScreen实例和名为turtle的Turtle实例的示例:

>>> screen.onclick(turtle.goto) # Subsequently clicking into the TurtleScreen will
>>>                             # make the turtle move to the clicked point.
>>> screen.onclick(None)        # remove event binding again
  

注意:此TurtleScreen方法仅作为全局函数使用,名称为onscreenclick。全局函数onclick是另一个源自Turtle方法onclick的函数。

快速切割......

因此,只需调用screen而不是turtle的方法。它就像将其改为:

一样简单
screen.onscreenclick(turtle.goto)

如果您输入了turtle.onclick(lambda x, y: fd(100))(或类似的东西),您可能会看到乌龟在您点击时向前移动。使用goto作为fun参数,您会看到乌龟去...它自己的位置。

每次移动时打印

如果你想在每次移动时打印,你应该定义自己的功能,这样做,并告诉龟去某个地方。我认为这会有效,因为turtle是一个单身人士。

def gotoandprint(x, y):
    gotoresult = turtle.goto(x, y)
    print(turtle.xcor(), turtle.ycor())
    return gotoresult

screen.onscreenclick(gotoandprint)

如果turtle.goto()返回None(我不知道),那么你实际上可以这样做:

screen.onscreenclick(lambda x, y: turtle.goto(x, y) or print(turtle.xcor(), turtle.ycor())

如果有效,请告诉我。我的计算机上没有tk,所以无法测试。