본문 바로가기
프로그래밍 언어/파이썬

파이썬 turtle 정리

by Jinger 2024. 1. 5.

서론

     파이썬의 turtle 모듈은 모듈을 활용하는 방법을 이해하는 교육용으로 쓰인다. 거북이 모양의 커서가 움직이면서 그림을 그리기에 공부하는 이들에게 재미와 흥미를 이끌기에 좋은 모듈이다. 그렇기에 학교에서 파이썬을 가르친다면 터틀을 사용하는 경우가 많아 정리해본다.


사용하기 전에

    터틀을 모듈을 불러오기 위해 inport 해야한다. import 방법은 참고의 모듈 세션을 참고바란다.

import turtle		# import turtle as t
t = turtle.Turtle()

메서드(명령어)

    터틀도 모듈이기에 위와 같이 선언을 했다면 turtle.메서드() 혹은 t.메서드()의 형태로 사용한다. 메서드 중 설정을 하거나 반환을 동시에 하는 메서드는 인자를 넣을 때는 설정을 인자를 넣지 않을 때는 반환을 하는 특징이 있다.

움직이기

  • forward(거리): 거북이가 향한 방향으로, 거리만큼 앞으로 움직인다.(==fd(거리), 거리는 숫자(정수나 실수)이다.)
  • back(거리): 거북이가 향한 반대 방향으로 거리만큼 뒤로 움직인다. 단 거북이의 방향은 바뀌지 않는다.(==bk(거리) == backward(거리), 거리는 숫자이다.)
  • right(각도): 거북이가 각도만큼 오른쪽으로 회전한다. 각도 방향은 거북이 모드에 따라 다르지만 기본적으로 degree로 설정되어 있다.(== rt(각도), 각도는 숫자이다, 각도는 degree 혹은 radians로 조작이 가능하다.)
  • left(각도): 거북이가 각도만큼 왼쪽으로 회전한다. 각도 방향은 거북이 모드에 따라 다르지만 기본적으로 degree로 설정되어 있다.(== lt(각도), 각도는 숫자이다, 각도는 degree 혹은 radians로 조작이 가능하다.)
  • goto(x,y): 거북이를 절대 위치(x, y)로 선을 그리며 움직인다. 단, 거북이의 방향은 바뀌지 않는다. (== setpos(x, y) == setposition(x, y), x와 y는 숫자이며 만약 x 위치에 숫자 쌍(스퀀스)을 넣으면 y는 적지 말아야한다.)
  • teleport(x, y): 거북이를 절대 위치로 선을 그리지 않으며 이동한다. 단, 거북이의 방향은 변하지 않는다.(x와 y는 숫자,순간이동이라 생각하면 편하다.)
  • setx(x): 거북이의 첫 번째 좌표를  x로 설정하고, 두 번째 좌표는 변경하지 않는다.(x는 숫자이다)
  • sety(y): 거북이의 두 번째 좌표를  y로 설정하고, 첫 번째 좌표는 변경하지 않는다.(y는 숫자이다.)
  • setheading(각도):  거북이의 방향을 각도로 설정한다. 아래 표준 및 로고 모드를 참고바란다.(== seth(각도), 각도는 숫자이다.)
  • home(): 거북이를 원점(좌표 0,0)으로 이동하고 방향을 시작 방향으로 설정한다.
  • circle(반지름, extent, steps): 반지름으로 원을 그린다. 중심은 거북이 왼쪽이다. 반지름이 양수이면 시계 반대 방향으로, 음수이면 시계 방향으로 그린다.  extent(각도)는 원의 어느 부분이 그려지는 지를 결정한다. extent에 값을 넣지 않으면 원을 그린다. steps는 해당 원의 내접하는 정다각형을 그린다.(반지름과 extent는 숫자이다, steps는 3 이상의 숫자이다.)
  • dot(크기, 색): 색을 이용하여 지름이 크기인 원형 점을 그린다.(크기는 1보다 같거나 큰 정수, 색은 색생 문자열 혹은 숫자 색상 튜플이다.)
  • stamp(): 현재 거북이 위치에 현재 커서 모양의 사본을 캔버스에 찍는다. 해당 스탬프는 stamp_id를 반환하는 데, clearstamp(stamp_id)를 호출하여 스탬프를 삭제하는데 사용할 수 있다.
  • clearstamp(stamp_id): 지정된 stamp_id의 스탬프를 삭제한다.(stamp_id는 정수 혹은 이전 stamp() 호출의 반환 값이어야한다.)
  • undo(): 마지막 거북이의 행동을 반복적으로 되돌린다.
  • speed(속도): 거북이의 속도를 0~10 사이의 정수값으로 설정한다. 인자가 없으면 현재 속도를 반환한다.(1<2<3<4<5<6<7<8<9<10(애니메이션 있음)/<0(애니메이션 없음) 순으로 빠르다, 10보다 크거나 0.5보다 작은 수는 0으로 설정이 된다.)
각도 표준 모드 로고 모드
0
90
180
270

상태

보고

  • position(): 거북이의 현재 위치 (x, y)를 벡터로 변환한다.(== pos())
  • toward(x, y): 거북이 위치에서 (x,y), 벡터 또는 거북이로 지정된 위치로의 선과의 각도를 반환한다. 이는 거북이의 시작 방향에 따라 다르다.
  • xcor(): 거북이의 x 좌표를 반환한다.
  • ycor(): 거북이의 y 좌표를 반환하다.
  • heading(): 거북이의 현재 방향을 반환한다.(값은 거북이 모드에 따라 다르다.)
  • distacne(x, y): 거북이에서 (x, y), 주어진 벡터 또는 주어진 다른 거북이까지의 거리를 거북이 단계 단위로 반환한다.(x, y는 숫자이며 x가 벡터일 경우 y는 안 써도 된다.)
  • degrees(각도): 각도 측정 단위를 설정한다. 즉, 전체 원에 대한 도의 수를 설정한다.(기본값은 360도이다.)
  • radians(): 각도 측정 단위를 라디안으로 설정한다. (degrees(2*math.pi)와 동등하다.)

거북이 상태

  • hideturtle(): 거북이를 보이지 않게 한다. 거북이를 숨기면 그리기 속도가 눈에 띄게 빨라진다.(== ht())
  • showturtle(): 거북이가 보이게 한다.(== st())
  • isvisible(): 거북이가 보이면 True를, 숨겨져 있으면 False를 반환한다.
  • shape(이름): 주어진 이름의 모양으로 거북이 모양을 설정하거나, 이름이 없으면 현재 모양의 이름을 반환한다. 모양은 아래 그림과 같이 존재한다.
  • resizemode(모드): 크기 조정 모드를 다음 중 하나로 설정한다. "auto", "user", "noresize". 모드가 제공되지 않으면, 현재 크기 조정 모드를 반환한다.
더보기
  • “auto”: 펜 크기(pensize)의 값에 맞춰 거북이의 외관을 조정한다.
  • “user”: shapesize()로 설정된 stretchfactor와 outlinewidth (outline) 값에 따라 거북이의 외관을 조정한다.
  • “noresize”: 거북이의 외관 조정이 일어나지 않는다.
  • shapesize(폭, 길이, 외곽선): 터틀 그래픽 모듈에서 터틀의 크기 및 형태에 대한 속성을 설정하거나 반환한다. 폭은 거북이 도형의 폭을, 길이는 거북이 모양의 길이를, 외곽선은 거북이 외곽선을 설정한다. (== turtlesize(), 폭, 길이, 외곽선는 양수이다.)
  • shearfactor(기울기): 기울기 계수를 설정하거나 반환한다. 기울기 계수에 따라 거불이 모양을 기울인다.(기울기는 숫자이다.)
  • tilt(각도): 현재 틸트 각도에서 거북이 모양을 각도 만큼 회전한다. 그러나 거북이의 방향을 변경하지 않는다.(각도는 숫자이다.)
  • 'tiltangle(각도): 현재 틸트 각도를 설정하거나 반환한다. 각도가 주어지면, 현재 틸트 각도와 관계없이 거북이 모양을 각도가 지정하는 방향을 가리키도록 회전한다. 거북이의 이동 방향을 변경하지 않는다. 각도가 주어지지 않으면 현재 틸트 각도, 즉 거북이 모양의 방향과 거북이 방향(이동 방향) 사이의 각도를 반환한다.
  • shapetransform(t11, t12, t21, t22): 거북이 모양의 현재 변환 행렬을 설정하거나 반환한다. 행렬 요소가 아무것도 제공되지 않으면, 변환 행렬을 4새 요소의 튜플로 반환한다. 그렇지 않으면, 주어진 요소를 설정하고 첫 번째 행(t11, t12)와 두 번째 행렬(t21, t22)로 구성된 행렬에 따라 거북이 모양을 변환한다.(행렬은 숫자이다. 단, t11 * t22 - t12 * t21은 0이 아니어야 한다.)
  • get_shapepoly(): 현재 모양 다각형을 좌표 쌍의 튜플로 반환한다. 이것은 새로운 모양이나 복합 모양의 구성 요소를 정의하는 데 사용할 수 있다.

그리기

  • pendown(): 펜을 내립니다. 즉, 움직일 때 그립니다.(== pd() == down())
  • penup(): 펜을 올립니다. 즉, 움직일 때 그리지 않습니다. (== pu() == up())
  • pensize(두께): 선 두께를 설정하거나 반환합니다.(== width(두께), 두께는 양수이다.)
  • pen(pen, pendict): 다음 키/값 쌍으로 펜 딕셔너리에 있는 펜의 속성을 반환하거나 설정한다. 이 딕셔너리는 이전 펜 상태를 복원하기 위해 pen()의 후속 호출에 대한 인자로 사용될 수 있다. 또한 이러한 속성 중 하나 이상을 키워드 인자를 제공할 수 있다. 하나의 문장에서 여러 펜 속성을 설정하는 데 사용한다.
더보기
  • “shown”: True/False
  • “pendown”: True/False
  • “pencolor”: 색상 문자열이나 색상 튜플
  • “fillcolor”: 색상 문자열이나 색상 튜플
  • “pensize”: 양수
  • “speed”: 0..10 범위의 숫자
  • “resizemode”: “auto” 또는 “user” 또는 “noresize”
  • “stretchfactor”: (양수, 양수)
  • “outline”: 양수
  • “tilt”: 숫자
  • isdown(): 펜이 내려가 있으면 True, 올라가 있으면 False를 반환한다.

색상 제어

  • pencolor(색상): 현재 펜 색상을 색상 지정 문자열 혹은 튜플로 반환한다. 색상에 색상 지정 문자열 혹은 r, g, b 값(혹은 튜플)을 설정 하면 펜 색상을 설정할 수 있다. 거북이 모양이 다각형이면, 해당 다각형의 외곽선은 새로 설정된 펜 색상으로 그려진다. (r, g, b는 1~255사이의 값이다. 색상 문자열은 "red" 혹은 "#33cc8c"와 같은 Tk 색상 지정 문자열을 말한다.)
  •  fillcolor(색상): 현재 채우기 색상을 색상 지정 문자열 로 반환한다. 색상에 색상 지정 문자열 혹은 r, g, b 값(혹은 튜플)로 설정한 색상을 설정할 수 있다. 거북이 모양이 다각형이면, 해당 다각형의 내부는 새로 설정된 채우기 색상으로 그려진다. (r, g, b는 1~255사이의 값이다. 색상 문자열은 "red" 혹은 "#33cc8c"와 같은 Tk 색상 지정 문자열을 말한다.)
  • color(색상, 색상): 현재 펜 색상과 현재 채우기 색상을 한쌍의 색 지정 문자열이나 튜플로 반환한다. 두 색상 인자 중 하나만 사용할 경우 입력, 채우기 색상이 주어진 값으로 설정이 된다. 두 색상 인자를 사용하면 앞 인자는 펜 색상을 뒷 인자는 채우기 색상을 지정할 수 있다. 거북이 모양이 다각형이면, 해당 다각형의 외각선과 내부가 새로 설정된 색상으로 그려진다. (r, g, b는 1~255사이의 값이다. 색상 문자열은 "red" 혹은 "#33cc8c"와 같은 Tk 색상 지정 문자열을 말한다.)

채우기

  • filling(): 채우기 상태를 반환한다. 채우면 True, 그렇지 않으면 False
  • begin_fill(): 채울 모양을 그리기 직전에 호출합니다.
  • end_fill(): begin_fill()을 마지막으로 호출한 후 그린 모양을 채운다.

   도형에 색 채우기 전에 begin_fill()을 색 채운 이후에는 end_fill() 사용해야한다.

그 외 그리기 제어

  • reset(): 화면에서 거북이의 그림을 삭제하고, 거북이를 다시 중심으로 옮기고, 변수를 기본값으로 설정한다.
  • clear(): 화면에서 거북이 그림을 삭제한다. 거북이를 움직이지 않습니다. 다른 거북이의 그림뿐만 아니라 거북이의 상태와 위치는 영향을 받지 않습니다.
  • write(객체, move, align, font): 객체는 화면에 기록될 객체(쓸 글)를, move이 Treu이면 펜이 텍스트의 오른쪽 아래 모서리로 이동한다.(디폴트 값으로 False) 정렬은 "left", "center", "right" 에 따라 현재 거북이 위치에서 주어진 글을 그린다. font는 3-튜플로 (폰트, 폰트 크기, 폰트 타입)을 지정할 수 있다.

캔버스

  • bgcolor(색상): 색상 문자열이나 r, g, b로 TurtleScreen의 배경생을 설정하거나 반환한다.
  • bgpic(파일): 배경 이미지를 설정하거나 현재 배경 이미지의 이름을 반환한다.(파일은 문자열, gif 파일의 이름 또는 "nopic"를 적을 수 있다.)
  • clear():  메서드는 현재 터틀이 그린 그림을 지우고, 터틀은 초기 위치(0, 0)로 돌아간다. 하지만 화면의 배경이나 설정된 속성들은 그대로 유지된다.
  • clearscreen(): 터틀 스크린 전체를 초기화한다. 모든 그림과 모든 거북이를 삭제하며, 터틀 스크린은 흰색 배경으로 초기화되고 배경 이미지가 없으며, 이벤트 연결과 추적도 초기 상태로 재설정된다.
  • reset(): 이 메서드는 현재의 터틀을 초기 상태로 되돌린다. 터틀의 위치, 방향, 펜 상태 등이 초기화되지만, 다른 거북이나 스크린의 설정은 변경되지 않는다.
  • resetscreen(): 현재의 터틀 뿐만 아니라 모든 거북이를 초기 상태로 재설정한다. 터틀 스크린의 모든 설정이 초기화되며, 터틀 스크린은 흰색 배경으로 초기화되고 배경 이미지가 없으며, 이벤트 연결과 추적도 초기 상태로 재설정된다.
  • screensize(너비, 높이, 색상): 인자를 넣지 않으면 현재 캔버스의 너비와 높이를 반환한다. 인자를 넣으면 거북이가 그리는 캔버스의 크기를 조정한다.(너비와 높이는 양수이며 픽셀 단위이다. 색상은 색상 문자열 혹은 색상 튜플로 배경색을 지정한다. 그리는 창을 변경하면 안 된다.)
  • setworldcoordinates(llx, lly, urx, ury): 사용자 정의 좌표계를 설정하고 필요하면 "world"모드로 전환한다.(인자는 모드 숫자이다. llx는 캔버스 왼쪽 아래 모서리의 x좌표, lly는 캔버스 왼쪽 아래 모서리의 y 좌표, urx는 캔버스의 오른쪽 상단 모서리의 x 좌표, ury는 캔버스의 오른쪽 상단 모서리의 y좌표)

애니메이션

  • delay(지연): 그리기 지연을 밀리초 단위로 설정하거나 반환한다.(1000ms == 1s)
  • tracer(n, delay): 거북이 애니메이션을 켜거나 끄고 그림 갱신 지연을 설정한다. n이 제공되면 n번째 정기 화면 갱신만 실제로 수행된다. 인자 없이 호출되면, 현재 저장된 n 값을 반환된다. 두 번째 인자는 지연 값을 설정한다.
  • update(): TurtleScreen 갱신을 수행한다.

화면 이벤트

  • listen(x, y): 키 이벤트를 수집하기 위해 TurtleScreen에 포커스를 설정한다. lusten()을 onclick 메서드에 전달할 수 있도록 더미 인자가 제공된다.
  • onkey(함수, 키): 키의 keyrelease 이벤트에 함수를 연결한다.(== onkeyrelease(함수, 키), 함수는 인자가 없는 함수, 키는 문자열 키(eg."a") 혹은 키-기호(eg."space"))
  • onkeypress(함수, 키): 키가 제공되면 키의 keypress 이벤트에 또는 키를 제공하지 않으면 임의의 키 누르기 이벤트에 함수를 연결한다.
  • onclick(함수, 클릭, add): 이 거북이의 마우스 클릭 이벤트에 함수를 연결한다. 함수가 None이면 기존 연결이 제거된다.(== onscreenclick(함수, 클릭, add), 함수는 캔버스에 클릭한 점의 좌표를 호출되는 두 개의 인자가 있는 함수, 클릭은 마우스 클릭으로 좌클릭 1, 휠 2, 우클릭 3을 의미한다. add가 True이면 새 연결이 추가되고, 그렇지 않으면 이전 연결을 대체한다.)
  • ontimer(함수, t): t 밀리 초 후 함수를 호출하는 타이머를 설치한다.
  • mainloop(): 이벤트 푸르를 시작한다. 터틀 그래픽 프로그램의 마지막 문장이어야 한다.(== done())

입력 메서드

  • textinput(제목, 안내) 문자열 입력을 위한 대화 상자 창을 띄운다. 대화 상자 창의 제목과 그 안 어떤 정보를 입력해야하는지 설명하는 안내이다. 제목과 안내 모두 문자열을 넣어야 하며 문자열 입력을 반환한다. 대화 상자가 취소되면, None을 반환한다.
  • numinput(제목, 안내, default, minval, maxval): 숫자 입력을 위한 대화창을 띄운다. 대화 상자 창의 제목과 그 안 어떤 숫자 정보를 입력해야하는 지 안내이다. 입력이 없다면 defalut값을, 입력의 최소값과 최대값을 지정할 수 있다. 대화 상자가 취소되면 None을 반환한다.

설정과 특수 메서드

  • mode(mode): 거북이 모드를 "standard", "logo", "world" 중 하나를 설정하고 재설정을 수행한다.
더보기

“standard” 모드는 이전 turtle과 호환된다.

“logo” 모드는 대부분의 로고 터틀 그래픽과 호환된다.

“world” 모드는 사용자 정의 “세계 좌표”를 사용한다. 주의: 이 모드에서는 x/y 단위 비율이 1이 아니면 각도가 왜곡되어 나타난다.

  • colormode(cmode): 색상 모드를 반환하거나 1.0 또는 255로 설정한다. 이어서 색상 삼중의 r, g, b 값은 0..*cmode* 범위에 있어야 한다.(cmode의 값은 1.0 이나 255중 하나이다.)
  • getcanvas(): 현재 TurtleScreen의 캔버스를 반환한다.
  • getshapes(): 현재 사용 가능한 모든 거북이 모양의 이름 리스트를 반환한다.
  • turtles(): 화면에 있는 거북이의 리스트를 반환한다.
  • window_height(): 거북이 창의 높이를 반환한다.
  • window_width(): 거북이 창의 너비를 반환한다.

이벤트

  • onclick(함수, 클릭, add): 이 거북이의 마우스 클릭 이벤트에 함수를 연결한다. 함수가 None이면 기존 연결이 제거된다.(함수는 캔버스에 클릭한 점의 좌표를 호출되는 두 개의 인자가 있는 함수, 클릭은 마우스 클릭으로 좌클릭 1, 휠 2, 우클릭 3을 의미한다. add가 True이면 새 연결이 추가되고, 그렇지 않으면 이전 연결을 대체한다.)
  • onrelease(함수, 클릭, add): 거북이의 마우스 버튼 해체 이벤트에 함수를 연결한다. 함수가 None이면 기존 연결이 제거된다.(함수는 캔버스에 클릭한 점의 좌표를 호출되는 두 개의 인자가 있는 함수, 클릭은 마우스 클릭으로 좌클릭 1, 휠 2, 우클릭 3을 의미한다. add가 True이면 새 연결이 추가되고, 그렇지 않으면 이전 연결을 대체한다.)
  • ondrag(함수, 클릭, add): 거북이의 마우스 이동 이벤트에 함수를 연결한다. 단, 거북이의 모든 마우스 이동 이벤트에 앞서 해당 거북이의 마우스 클릭 이벤트가 선행된다. (함수는 캔버스에 클릭한 점의 좌표를 호출되는 두 개의 인자가 있는 함수, 클릭은 마우스 클릭으로 좌클릭 1, 휠 2, 우클릭 3을 의미한다. add가 True이면 새 연결이 추가되고, 그렇지 않으면 이전 연결을 대체한다.)

특수 메서드

  • begin_poly(): 다각형의 꼭짓점 기록을 시작한다. 현재 거북이 위치가 다각형의 첫 번째 꼭짓점이다.
  • end_poly(): 다각형의 곡짓점 기록을 중지한다. 현재 거북이 위치가 다각형의 마지막 꼭짓점이다. 첫 번째 꼭짓점과 연결된다.
  • get_poly(): 마지막으로 기록된 다각형을 반환한다.
  • clone(): 같은 위치, 방향 및 거북이 속성을 가진 거북이 복제본을 만들고 반환한다.
  • getturtle(): 거북이 객체 자체를 반환한다.(== getpen())
  • getscreen(): 거북이가 그리는 TurtleScreen 객체를 반환한다.

예시

    터틀을 이용한 예시들은 아래와 같은 형태를 띈다. 위 함수를 이용하여 다양한 그림을 그려보자. 이해를 돕기 위해 몇가지 예시를 만들어 보았다.

# 임포트
import turtle as t
# 설정
--
# 도형 그리기
--
# 화면 유지
t.mainloop()

더보기
import turtle
t = turtle.Turtle()
t.shape("turtle")
t.color("blue")
t.speed(0)
for i in range(1,100):
    t.circle(100)
    t.right(59)
    
turtle.exitonclick()# 마우스 클릭 시 프로그램 종료

더보기
import turtle
color = ["red", "blue", "green", "orange", "yellow", "purple"]
t = turtle.Turtle()
screen=turtle.Screen()
screen.bgcolor("black")
t.speed(10)
for i in range(200):
    t.color(color[i%6])
    t.forward(i*1.5)
    t.left(59)
    t.width(3)
    
turtle.exitonclick()# 마우스 클릭 시 프로그램 종료

더보기
import turtle

def draw_snowflake(t, order, size):
    if order == 0:
        t.forward(size)
    else:
        draw_snowflake(t, order-1, size/3)
        t.left(60)
        draw_snowflake(t, order-1, size/3)
        t.right(120)
        draw_snowflake(t, order-1, size/3)
        t.left(60)
        draw_snowflake(t, order-1, size/3)

def draw_snowflake_fractal(t, order, size):
    for _ in range(6):
        draw_snowflake(t, order, size)
        t.right(60)

def main():
    window = turtle.Screen()
    window.bgcolor("white")

    snowflake_turtle = turtle.Turtle()
    snowflake_turtle.speed(0)
    snowflake_turtle.color("blue")

    snowflake_turtle.penup()
    snowflake_turtle.goto(-100, 50)
    snowflake_turtle.pendown()

    draw_snowflake_fractal(snowflake_turtle, 3, 200)

    window.mainloop()

if __name__ == "__main__":
    main()

주섬주섬

    위 메서드를 모두 외우는 것은 이를 전문적으로 사용하지 않는 이상 불필요하다. 이 글을 보며 참고하여 자신만의 작품을 만드는 것을 추천한다.

참고

 

Python turtle module cheatsheet Cheat Sheet

Python beginner cheatsheet, playing with turtles

cheatography.com

 

turtle — Turtle graphics

Source code: Lib/turtle.py Introduction: Turtle graphics is an implementation of the popular geometric drawing tools introduced in Logo, developed by Wally Feurzeig, Seymour Papert and Cynthia Solo...

docs.python.org

 

8.모듈

서론 파이썬에는 기본 탑재된 함수나 다른 사람이 만든 함수나 변수들을 불러 사용할 수 있다. 이런 기능들이 있기에 파이썬이 다재다능해질 수 있는다. 모듈 모듈이란 함수나 변수 등을 모아

jinger.tistory.com

 

반응형

'프로그래밍 언어 > 파이썬' 카테고리의 다른 글

12.기타  (1) 2023.03.20
11.파일  (0) 2023.03.13
10.예외처리  (0) 2023.03.13
9.클래스  (0) 2023.03.07
8.모듈  (0) 2023.03.02

댓글