Sidharth D
Sidharth D

Reputation: 49

Python - How to make turtle go to (x,y) position without having it move across the screen?

I want to know how to make Turtle go to an (x, y) coordinate without having it move across the screen. I tried the .goto() and .setposition() methods, but they both make the turtle move across the screen. How do I do this?

Upvotes: 3

Views: 16120

Answers (3)

ggorlen
ggorlen

Reputation: 56885

.speed(0) still takes time to move the turtle, and hiding/showing the turtle doesn't change the overall delay.

The only way to move the turtle somewhere instantaneously (in a single frame) is to disable tracer, which is turtle's internal update loop, and use .update() to trigger a redraw after repositioning the turtle. You can re-enable tracer if you want after the move.

Here's an example showing 100 gotos performed in a single frame:

from random import randint
from turtle import Screen, Turtle


screen = Screen()
screen.tracer(0)  # disable turtle's update loop
w, h = screen.screensize()
t = Turtle()

for _ in range(100):
    t.goto(randint(-w, w), randint(-h, h))

screen.update()  # draw the frame

screen.tracer(1)  # optionally re-enable the internal update loop
t.goto(randint(-w, w), randint(-h, h))

screen.exitonclick()

You can use t.penup() to avoid the lines, and you can use t.hideturtle() if you don't want to see the turtle.

If you're trying to make a real-time game, animation or app where precise control and user input is necessary, see this more involved demo.

Upvotes: 0

Stevoisiak
Stevoisiak

Reputation: 26752

You can disable movement animations by setting turtle.speed(0). This will make the Turtle move instantaneously across the screen.

import turtle

turtle.setup(400, 300)  # set up canvas

my_object = turtle.Turtle()  # create object
my_object.speed(0)  # configure object to move without animations
my_object.goto(-150, 0)  # move object

turtle.done()

A thin black line originating from the center of the window towards an arrow on the left

Sources:

Upvotes: 0

Taku
Taku

Reputation: 33714

You can use pen up, then set the turtle invisible, then use goto to move the turtle to your position.

turtle.up()
turtle.ht()
turtle.goto(x, y)

# reshow the turtle
turtle.st()
turtle.down()

Upvotes: 1

Related Questions