Tortuga en Python: tratando de que la tortuga se mueva a la posición de clic del mouse e imprima sus coordenadas

Estoy tratando de obtener la posición del ratón a través de la tortuga Python. Todo funciona, excepto que no puedo hacer que la tortuga salte a la posición del clic del ratón.

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() 

Según tengo entendido, la línea que dice ‘turtle.onclick (turtle.goto)’ debería enviar a la tortuga a donde quiera que haga clic con el mouse, pero no lo hace. La línea de impresión es una prueba, pero solo devuelve la posición en la que envié a la tortuga al final, nominalmente (0, 650), aunque esto no tiene mayor importancia.

Intenté buscar tutoriales y en el pydoc, pero hasta ahora no he podido escribir esto con éxito.

Aprecio tu ayuda. Gracias.

Edición: Necesito que la tortuga vaya a la posición de clic (listo) pero también la necesito para imprimir las coordenadas.

Usted está buscando onscreenclick() . Es un método de TurtleScreen . El método onclick() de una Turtle refiere a los clics del mouse sobre la tortuga. Confusamente, el método onclick() de TurtleScreen es lo mismo que su método onscreenclick() .

24.5.4.3. Usando eventos de pantalla ¶

turtle.onclick ( fun , btn = 1 , add = None )
turtle.onscreenclick ( fun , btn = 1 , add = None ) ¶

Parámetros:

  • fun – una función con dos argumentos que se llamarán con las coordenadas del punto en el que se hizo clic en el canvas
  • num : número del botón del mouse, el valor predeterminado es 1 (botón izquierdo del mouse)
  • agregarTrue o False – si es True , se agregará un nuevo enlace, de lo contrario reemplazará un enlace anterior

Enlazar la diversión para hacer clic con el ratón en los eventos en esta pantalla. Si fun es None , se eliminan los enlaces existentes.

Ejemplo para una instancia de TurtleScreen llamada screen y una instancia de Turtle llamada 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 

Nota : este método TurtleScreen está disponible como una función global solo con el nombre onscreenclick . La función global onclick es otra derivada del método Turtle onclick .

Cortando a la rápida …

Entonces, solo invoca el método de screen y no turtle . Es tan simple como cambiarlo a:

 screen.onscreenclick(turtle.goto) 

Si hubieras escrito turtle.onclick(lambda x, y: fd(100)) (o algo así) probablemente turtle.onclick(lambda x, y: fd(100)) visto avanzar a la tortuga al hacer clic en ella. Con goto como el argumento fun , verías a la tortuga ir a … su propia ubicación.

Imprimiendo cada vez que te mueves

Si desea imprimir cada vez que se mueva, debe definir su propia función que lo hará así como decirle a la tortuga que vaya a algún lugar. Creo que esto funcionará porque la turtle es un singleton.

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

Si turtle.goto() devuelve None (no lo sabría), entonces puedes hacer esto:

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

Hazme saber si esto funciona. No tengo tk en mi computadora, así que no puedo probar esto.