turtle — 터틀 그래픽

turtle — 터틀 그래픽

turtle 모듈은 초등학교 아이들이나 프로그래밍을 처음 배우는 사람이 재미있게 접근할 수 있도록 설계된 터틀 그래픽 방식의 절차적(procedural) "바다 거북이"(turtle)를 제공해요. Logo 언어에서 잘 알려진 터틀 그래픽을 파이썬으로 구현한 것으로, 화면 위를 움직이는 거북이가 선을 그리며 그림을 만들어 가죠.

이 모듈은 Tk 8.5 이상 버전의 그래픽을 요구하며, Python 배포판에 표준으로 포함돼 있어요. 기본적으로 화면에 창을 띄워 거북이가 그리는 과정을 보여줍니다.

출처: Python 표준 라이브러리 — turtle

본문

시작하기 (Get started)

터틀 환경을 시작하는 방법부터 볼게요. Turtle 인스턴스를 만들고 기본 배경색을 바꾸고 선을 그려요.

import turtle

# 시작하기
t = turtle.Turtle()      # 터틀 객체 생성
turtle.bgcolor("lightgreen")   # 배경색 설정
t.pensize(3)             # 펜 두께
t.color("hotpink")       # 펜 색
t.forward(100)           # 앞으로 100 이동하며 선 그리기
t.left(90)               # 왼쪽으로 90도 회전
t.forward(50)
t.hideturtle()           # 거북이 숨기기
turtle.done()            # 화면 유지

screen = turtle.Screen()으로 화면 객체를 얻는 것도 가능해요.

기본 그리기 (Basic drawing)

  • t.forward(distance) / t.fd(distance) — 거북이를 앞으로 distance만큼 이동.
  • t.backward(distance) / t.bk(distance) — 뒤로 이동.
  • t.right(angle) / t.rt(angle) — 오른쪽으로 angle도 회전.
  • t.left(angle) / t.lt(angle) — 왼쪽으로 angle도 회전.
  • t.goto(x, y) — 특정 좌표로 이동. t.setpos(x, y).
  • t.home() — 원점(0,0)으로 이동하며 방향도 초기화.
  • t.dot(size=None, *color) — 점을 그리기.
  • t.circle(radius, extent=None, steps=None) — 원 또는 호를 그리기.
  • t.speed(speed) — 애니메이션 속도 설정 (0~10, 0은 즉시).

펜 제어 (Pen control)

  • t.penup() / t.pu() / t.up() — 펜을 들어 이동해도 선이 그어지지 않게.
  • t.pendown() / t.pd() / t.down() — 펜을 내림.
  • t.pensize(width) / t.width(width) — 펜 두께.
  • t.pencolor(*args) — 펜 색. t.color(*args) — 펜과 채우기 색.
  • t.fillcolor(*args) — 채우기 색.
  • t.isdown() — 펜이 내려가 있는지 여부.

채우기 (Filling)

  • t.begin_fill() — 채우기 시작. t.end_fill() — 채우기 종료. 시작~종료 사이에 그린 닫힌 도형이 채워져요.
import turtle

t = turtle.Turtle()
t.begin_fill()
t.color("red", "yellow")   # 펜은 red, 채움은 yellow
for _ in range(4):
    t.forward(100)
    t.left(90)
t.end_fill()
turtle.done()

begin_fill()/end_fill() 안에 반복을 넣으면 알고리즘 패턴도 쉽게 그릴 수 있어요.

거북이의 위치 (The turtle's position)

  • t.position() / t.pos() — 현재 좌표 (x, y) 반환.
  • t.xcor() / t.ycor() — x, y 좌표.
  • t.heading() — 현재 방향(각도). t.setheading(angle) / t.seth(angle) — 방향 설정.
  • t.distance(x, y) — 주어진 점까지의 거리.

알고리즘 패턴 만들기 (Making algorithmic patterns)

반복문으로 규칙적인 패턴을 그릴 수 있어요.

import turtle

t = turtle.Turtle()
t.speed(0)
for i in range(36):
    t.circle(50)
    t.left(10)      # 10도씩 회전하며 원 36개
turtle.done()

How to…

  • 가능한 한 빨리 시작하기turtle.Turtle()이 이미 그리기를 위한 거북이 하나를 만들기 때문에 from turtle import *만 하면 곧바로 함수처럼 쓸 수 있어요.
  • 채우기 자동 시작/종료 — 위 begin_fill()/end_fill() 예시.
  • turtle 모듈 네임스페이스 사용하기from turtle import * 하면 전역적으로 함수로 사용.
  • 스크립트에서 터틀 그래픽 사용하기 — 스크립트 끝에 turtle.done() 또는 turtle.exitonclick()을 호출해 창을 유지.
  • 객체지향 터틀 그래픽 사용하기Turtle 클래스의 인스턴스를 여러 개 만들어 각각 독립적으로 제어.

터틀 그래픽 레퍼런스 (Turtle graphics reference)

Turtle 메서드 — 위에 나열된 기본 그리기·펜 제어 외에:

  • 터틀 이동forward(), backward(), right(), left(), goto(), setx(), sety(), setheading(), home(), circle(), dot(), stamp(), undo(), speed().
  • 터틀 상태 확인position(), towards(), xcor(), ycor(), heading(), distance().
  • 측정 설정degrees(), radians().
  • 펜 제어pendown(), penup(), pensize(), pen(), isdown(), color(), pencolor(), fillcolor(), shapesize(), resizemode().
  • 그리기 상태filling(), begin_fill(), end_fill(), circle(), dot().
  • 채우기begin_fill(), end_fill(), filling().
  • 더 많은 그리기 제어reset(), clear(), write(arg, move=False, align="left", font=("Arial", 8, "normal")).
  • 터틀 상태showturtle(), hideturtle(), isvisible().
  • 외형 (Appearance)shape(), pensize(), resizemode(), shapesize().
  • 이벤트 사용하기onclick(), onrelease(), ondrag().
  • 특수 터틀 메서드begin_poly(), end_poly(), get_poly(), clone(), getturtle(), getscreen(), setundobuffer(), undobufferentries().

TurtleScreen / Screen 메서드 — 화면·창 제어:

  • 창 제어bgcolor(), bgpic(), clear(), colormode(), reset(), screensize(), setworldcoordinates(), title().
  • 애니메이션 제어delay(), tracer(), update().
  • 화면 이벤트 사용하기onclick(), onkey(), onkeypress(), onkeyrelease(), listen().
  • 입력 메서드textinput(title, prompt), numinput(title, prompt, default=None, minval=None, maxval=None).
  • 설정·특수 메서드mode(), colormode(), getcanvas(), getshapes(), register_shape(), turtles(), window_width(), window_height().

Screen 전용 메서드 (TurtleScreen에서 상속받지 않은 것)bye(), exitonclick(), setup(width, height, startx, starty), title(visiblestr), colormode(cmode), bgcolor(), bgpic(picname), delay(ms), onscreenclick(fun), onkeypress(), listen(), mainloop() 등.

공개 클래스 (Public classes)

  • class turtle.RawTurtle(canvas) / class turtle.RawPen(canvas)TurtleScreen 위에서 그리는 터틀.
  • class turtle.Turtle(screen=None)RawTurtle의 하위 클래스로, 화면이 주어지지 않으면 자동으로 Screen을 만듭니다.
  • class turtle.TurtleScreen(cv) — 그래픽을 그리는 화면(스크린). 입력 이벤트를 처리.
  • class turtle.Screen()TurtleScreen의 하위 클래스. Screen()은 단일 인스턴스(singleton)만 만들 수 있고 TurtleScreen.exitonclick() 등을 제공.
  • class turtle.ScrolledCanvas(master)Canvas를 상속한 스크롤 가능한 캔버스.

설명 (Explanation)

  • 도움말 사용법 (How to use help)help(turtle.forward) 같은 방식으로 각 함수·메서드의 독스트링을 확인할 수 있어요.
  • 독스트링 번역turtle 모듈의 독스트링은 start(), write_docstringdict() 같은 함수로 여러 언어로 번역할 수 있어요.
  • Screen과 Turtle 구성하기turtle.Screen() 인스턴스, turtle.setup(), turtle.mode(), turtle.colormode() 등을 통해 화면과 거북이를 설정합니다.

turtledemo — 데모 스크립트

turtledemo 패키지는 터틀 그래픽 데모 예제들을 담고 있어요. python -m turtledemo로 데모 셀렉터를 실행할 수 있습니다.

Python 2.6 이후의 변경 사항 (Changes since Python 2.6)

터틀 모듈의 동작·API에 일부 변경이 있었음을 알 수 있어요 (구체 변경은 원문 참고). Python 3.0 이후에도 Turtle·Screen 기본 동작이 개선됐습니다.

더 알아보기