turtle — 터틀 그래픽
turtle — 터틀 그래픽
turtle 모듈은 초등학교 아이들이나 프로그래밍을 처음 배우는 사람이 재미있게 접근할 수 있도록 설계된 터틀 그래픽 방식의 절차적(procedural) "바다 거북이"(turtle)를 제공해요. Logo 언어에서 잘 알려진 터틀 그래픽을 파이썬으로 구현한 것으로, 화면 위를 움직이는 거북이가 선을 그리며 그림을 만들어 가죠.
이 모듈은 Tk 8.5 이상 버전의 그래픽을 요구하며, Python 배포판에 표준으로 포함돼 있어요. 기본적으로 화면에 창을 띄워 거북이가 그리는 과정을 보여줍니다.
본문
시작하기 (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 기본 동작이 개선됐습니다.