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

JFA*_*JFA 3 python turtle-graphics python-3.x

我正试图通过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()
Run Code Online (Sandbox Code Playgroud)

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

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

我感谢您的帮助.谢谢.

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

2rs*_*2ts 8

你在找onscreenclick().这是一种方法TurtleScreen.a的onclick()方法是Turtle指鼠标点击龟本身.令人困惑的是,onclick()方法TurtleScreen与其onscreenclick()方法相同.

24.5.4.3.使用屏幕事件

turtle.onclick(有趣,btn = 1,添加=无)
turtle.onscreenclick(有趣,btn = 1,添加=无)

参数:

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

在此屏幕上为鼠标单击事件绑定乐趣.如果好玩的None,现有绑定被删除.

名为TurtleScreen实例的示例screen和名为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
Run Code Online (Sandbox Code Playgroud)

注意:此TurtleScreen方法仅在名称下可用作全局函数onscreenclick.全局函数onclick是源自Turtle方法的另一个函数onclick.

快速切割......

所以,只需调用方法screen而不是turtle.它就像将其更改为:

screen.onscreenclick(turtle.goto)
Run Code Online (Sandbox Code Playgroud)

如果你输入了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)
Run Code Online (Sandbox Code Playgroud)

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

screen.onscreenclick(lambda x, y: turtle.goto(x, y) or print(turtle.xcor(), turtle.ycor())
Run Code Online (Sandbox Code Playgroud)

让我知道这个是否奏效.我的计算机上没有tk所以我无法测试.