Dibujar con Turtle en Python convierte instrucciones de programación en movimientos visibles. En lugar de limitarte a mostrar resultados en la terminal, controlas un cursor que avanza, gira y deja líneas sobre una ventana. Esa respuesta inmediata hace que Turtle sea una herramienta excelente para practicar bucles, funciones, coordenadas, colores y eventos del teclado.
En esta guía crearás una ventana, moverás la tortuga, dibujarás figuras geométricas, rellenarás formas, repetirás patrones y construirás un pequeño artista interactivo. Turtle forma parte de la biblioteca estándar de Python, por lo que normalmente no necesitas instalar un paquete adicional.
Qué es Turtle
Turtle es un módulo gráfico basado en un cursor móvil. Puedes indicarle que avance, retroceda, gire, levante el lápiz, cambie de color o dibuje círculos. Python ofrece una interfaz sencilla por funciones y otra orientada a objetos. Utilizaremos objetos porque permiten trabajar con varias tortugas y organizar mejor proyectos grandes.
La documentación oficial de Turtle describe todos sus métodos. El módulo utiliza Tk, así que necesita un entorno gráfico. En algunos sistemas Linux puede ser necesario instalar el paquete de Tk por separado.
Crear la primera ventana
import turtle
pantalla = turtle.Screen()
pantalla.title("Mi primer dibujo con Turtle")
pantalla.bgcolor("white")
pantalla.setup(width=800, height=600)
artista = turtle.Turtle()
artista.shape("turtle")
artista.color("royalblue")
artista.pensize(3)
artista.forward(150)
artista.left(90)
artista.forward(100)
pantalla.mainloop()mainloop() mantiene activa la ventana. Sin esa llamada, el programa puede terminar y cerrar la interfaz inmediatamente.
Movimiento y rotación
forward(distancia): avanza en la dirección actual.backward(distancia): retrocede.left(angulo): gira en sentido antihorario.right(angulo): gira en sentido horario.goto(x, y): se mueve hasta una coordenada.setheading(angulo): establece una dirección absoluta.
Los ángulos se expresan en grados. El valor 0 apunta hacia la derecha, 90 hacia arriba, 180 hacia la izquierda y 270 hacia abajo.
artista.goto(-200, -100)
artista.setheading(45)
artista.forward(140)Dibujar un cuadrado con un bucle
for _ in range(4):
artista.forward(120)
artista.right(90)El guion bajo indica que el contador no se utiliza. El bucle elimina repeticiones y muestra claramente la relación entre la forma y sus cuatro lados.
Crear una función para polígonos
def dibujar_poligono(tortuga, lados, longitud):
if lados < 3:
raise ValueError("Un polígono necesita al menos tres lados")
angulo = 360 / lados
for _ in range(lados):
tortuga.forward(longitud)
tortuga.right(angulo)
dibujar_poligono(artista, lados=6, longitud=80)La función puede dibujar triángulos, cuadrados, pentágonos y otras figuras sin duplicar la lógica.
Levantar y bajar el lápiz
Usa penup() para cambiar de posición sin dibujar y pendown() para volver a trazar líneas.
artista.penup()
artista.goto(-250, 150)
artista.pendown()
artista.circle(60)Otros métodos útiles son pensize(), pencolor(), speed(), hideturtle() y showturtle().
Colores y figuras rellenas
artista.pencolor("darkgreen")
artista.fillcolor("lightgreen")
artista.begin_fill()
for _ in range(3):
artista.forward(140)
artista.left(120)
artista.end_fill()También puedes configurar colores RGB:
pantalla.colormode(255)
artista.color((40, 90, 180), (180, 220, 255))Círculos, puntos y arcos
artista.circle(80)
artista.circle(100, extent=180)
artista.dot(25, "tomato")Un radio negativo dibuja en la dirección opuesta. El argumento extent limita el círculo a un arco.
Crear arte geométrico
artista.speed(0)
colores = ["#2563eb", "#7c3aed", "#db2777", "#ea580c"]
for indice in range(72):
artista.pencolor(colores[indice % len(colores)])
artista.circle(100)
artista.left(5)El operador módulo recorre la lista de colores de forma repetida.
Acelerar dibujos grandes
Cuando el patrón contiene cientos de líneas, puedes desactivar la actualización automática y refrescar la pantalla al final.
pantalla.tracer(0)
for angulo in range(0, 360, 3):
artista.setheading(angulo)
artista.forward(180)
artista.backward(180)
pantalla.update()Controlar la tortuga con el teclado
DISTANCIA = 20
GIRO = 15
def avanzar():
artista.forward(DISTANCIA)
def retroceder():
artista.backward(DISTANCIA)
def girar_izquierda():
artista.left(GIRO)
def girar_derecha():
artista.right(GIRO)
pantalla.listen()
pantalla.onkeypress(avanzar, "Up")
pantalla.onkeypress(retroceder, "Down")
pantalla.onkeypress(girar_izquierda, "Left")
pantalla.onkeypress(girar_derecha, "Right")Las funciones se pasan sin paréntesis porque Turtle debe ejecutarlas después, cuando ocurra el evento.
Responder a clics del ratón
def mover_al_clic(x, y):
artista.goto(x, y)
pantalla.onclick(mover_al_clic)La función recibe las coordenadas del clic. Este tipo de programación orientada a eventos también aparece en juegos.
Trabajar con varias tortugas
azul = turtle.Turtle()
roja = turtle.Turtle()
azul.color("blue")
roja.color("red")
azul.goto(-150, 0)
roja.goto(150, 0)
azul.circle(70)
roja.circle(-70)Cada objeto mantiene su propia posición, orientación y apariencia.
Proyecto completo: artista interactivo
import random
import turtle
COLORES = ["#2563eb", "#7c3aed", "#db2777", "#059669", "#ea580c"]
pantalla = turtle.Screen()
pantalla.title("Artista interactivo")
pantalla.setup(900, 650)
pantalla.bgcolor("#f8fafc")
artista = turtle.Turtle()
artista.shape("turtle")
artista.speed(0)
artista.pensize(3)
artista.color(COLORES[0])
def avanzar():
artista.forward(25)
def retroceder():
artista.backward(25)
def izquierda():
artista.left(15)
def derecha():
artista.right(15)
def alternar_lapiz():
if artista.isdown():
artista.penup()
else:
artista.pendown()
def cambiar_color():
artista.pencolor(random.choice(COLORES))
def limpiar():
artista.clear()
artista.penup()
artista.home()
artista.pendown()
def espiral():
for paso in range(5, 205, 5):
artista.pencolor(COLORES[(paso // 5) % len(COLORES)])
artista.forward(paso)
artista.right(91)
pantalla.listen()
pantalla.onkeypress(avanzar, "Up")
pantalla.onkeypress(retroceder, "Down")
pantalla.onkeypress(izquierda, "Left")
pantalla.onkeypress(derecha, "Right")
pantalla.onkeypress(alternar_lapiz, "space")
pantalla.onkeypress(cambiar_color, "c")
pantalla.onkeypress(limpiar, "x")
pantalla.onkeypress(espiral, "s")
pantalla.onclick(artista.goto)
pantalla.mainloop()Usa las flechas para mover la tortuga, Espacio para levantar o bajar el lápiz, C para cambiar el color, X para limpiar y S para dibujar una espiral.
Problemas frecuentes
- La ventana se cierra: termina con
mainloop()oturtle.done(). - Las teclas no responden: llama a
listen()y enfoca la ventana. - El dibujo es lento: usa
speed(0)otracer(0). - No se abre la ventana: comprueba que Python tenga soporte para Tk.
- La tortuga dibuja al cambiar de sitio: usa
penup()ypendown().
Ideas para continuar
- Crear una caminata aleatoria.
- Dibujar un reloj o una cuadrícula.
- Construir una carrera de tortugas.
- Crear un laberinto controlado por teclado.
- Dibujar árboles fractales con recursión.
- Añadir puntuación y colisiones para crear un juego.
Conclusión
Turtle hace visibles conceptos que al principio parecen abstractos. El movimiento introduce coordenadas, los polígonos practican bucles, las figuras reutilizables enseñan funciones y los controles de teclado presentan la programación por eventos.
Comienza con una figura sencilla y cambia distancias, ángulos, colores y repeticiones. Intentar predecir el resultado antes de ejecutar el programa es una excelente forma de aprender.
Lecturas relacionadas
- Repasa la repetición utilizada en las figuras con la guía de bucles for en Python.
- Organiza polígonos y controles reutilizables con la guía de funciones en Python.
- Para crear caminatas y colores aleatorios, consulta el módulo random de Python.



