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)
- agregar –
True
oFalse
– si esTrue
, se agregará un nuevo enlace, de lo contrario reemplazará un enlace anteriorEnlazar 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 globalonclick
es otra derivada del método Turtleonclick
.
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.
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.