ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python/Turtle] 2. Methods/Turtle motion, Pen control, More drawing control, Using events, Compound shapes
    코딩/Python 2022. 12. 19. 21:36
    728x90
    forward / back / right / left / goto;setpos;setposition / setx / sety / setheading;seth / home / circle / dot / stamp / clearstamp / clearstamps / undo / speed / pendown;pd;down / penup;pu;up / pensize / pen / isdown / reset / clear / write / onclick / onrelease / ondrag / begin_poly / end_poly / get_poly / clone / getturtle;getpen / getscreen / setundobuffer / undobufferentries / Compound shapes

    Methods of RawTurtle/Turtle

    Turtle motion

    turtle.forward(distance) / turtle.fd(distance)

    거북이를 전진시킨다.

    turtle.forward(25)
    turtle.forward(-75)

    turtle.back(distance) / turtle.bk(distance) / turtle.backward(distance)

    거북이의 머리방향을 변경시키지 않고 반대방향으로 움직인다.

    turtle.backward(30)

    거북이를 지정된 각도(도)로 우회전시킨다.
    각도는 degree()radians()로 정할 수 있다.
    각도 방향은 모드에 따라 다르다.
    mode() 참조

    turtle.right(45)

    turtle.left(angle) / turtle.lt(angle)

    거북이를 지정된 각도(도)로 좌회전시킨다.

    turtle.left(45)

    turtle.goto(x, y=None) / turtle.setpos(x, y=None) / turtle.setposition(x, y=None)

    x – a number or a pair/vector of numbers
    y – a number or None

    거북이를 절대 위치로 이동시킨다. 펜이 내려진 상태라면 선이 그어진다. 거북이의 방향은 바꾸지 않는다.
    y가 None이라면 x는 한짝의 좌표이거나 Vec2D여야 한다.

    tp = turtle.pos()
    turtle.setpos(60,30)
    turtle.setpos((20,80))
    turtle.setpos(tp)

    turtle.setx(x)

    x좌표를 x로 설정한다. y좌표는 변경하지 않는다.

    turtle.setx(10)

    turtle.sety(y)

    y좌표를 y로 설정한다. x좌표는 변경하지 않는다.

    turtle.sety(-10)

    turtle.setheading(to_angle) / turtle.seth(to_angle)

    to_angle 각도로 방향을 정한다.

    turtle.setheading(90)

    turtle.home()

    좌표 (0,0) 원점으로 복귀시킨다. 방향도 시작위치로 복귀시킨다.

    turtle.home()

    turtle.circle(radius, extent=None, steps=None)

    radius 반지름으로 원을 그린다.
    중심은 거북이의 왼쪽 반경 단위(center is radius units left of the turtle???).
    범위 – 각도 – 그려지는 원의 부분을 결정하고 범위가 지정되지 않은 경우 전체 원을 그린다.
    범위가 완전한 원이 아닌 경우 호의 한 끝점이 현재 펜 위치.
    반지름이 양수이면 반시계 방향, 그렇지 않으면 시계 방향.
    거북이의 방향이 범위만큼 변경.
    원은 내접 정다각형으로 근사.
    단계는 사용할 단계 수를 결정. 입력하지 않으면 자동으로 계산. 정다각형을 그리는 데 사용할 수 있다.

    turtle.circle(50)
    turtle.circle(120, 180)  # draw a semicircle

    turtle.dot(size=None, *color)

    size – an integer >= 1 (if given)
    color – a colorstring or a numeric color tuple

    size의 직경과 color 색으로 원형점을 그린다.
    크기가 주어지지 않으면 최대 pensize+4와 2*pensize로 그린다.

    turtle.home()
    turtle.dot()
    turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50)

    turtle.stamp()

    거북이의 현재 모습을 화면에 찍고 stamp_id를 반환한다.
    stamp_id는 clearstamp(stamp_id)로 지울 수 있다.

    turtle.color("blue")
    turtle.stamp()
    turtle.fd(50)

    turtle.clearstamp(stampid)

    stampid의 스탬프를 지운다.

    turtle.color("blue")
    astamp = turtle.stamp()
    
    turtle.fd(50)
    turtle.clearstamp(astamp)

    turtle.clearstamps(n=None)

    None이면 모든 스탬프를 지우고, n>0이면 첫번째 n 스탬프, n<0은 마지막 n 스탬프를 지운다.

    for i in range(8):
    	turtle.stamp(); turtle.fd(30)
    
    turtle.clearstamps(2)
    turtle.clearstamps(-2)
    turtle.clearstamps()

    turtle.undo()

    실행취소. 취소가능한 횟수는 undobuffer의 크기에 따른다.

    for i in range(4):
        turtle.fd(50); turtle.lt(80)
    
    for i in range(8):
        turtle.undo()

    turtle.speed(speed=None)

    speed – an integer in the range 0..10 or a speedstring (see below)

    0..10까지 거북이 속도를 설정한다. 아무 숫자도 주어지지 않으면 현재 속도를 반환한다.
    10보다 크거나 0.5보다 작은 수가 주어지면 속도를 0으로 설정한다.
    속도 0은 애니매이션 없이 즉각 움직이게 한다.

    Speedstrings speedvalues
    “fastest” 0
    “fast” 10
    “normal” 6
    “slow” 3
    “slowest” 1
    turtle.speed()
    turtle.speed('normal')
    turtle.speed()
    turtle.speed(9)

    Pen control

    Drawing state

    turtle.pendown()/ turtle.pd()/ turtle.down()

    펜을 아래로 당긴다 – 움직일 때 그림을 그린다.

    turtle.penup()/ turtle.pu()/ turtle.up()

    펜을 위로 당긴다 – 움직일 때 그림을 그리지 않는다.

    turtle.pensize(width=None)/ turtle.width(width=None)

    선 두께를 너비로 설정하거나 반환.
    크기 조정 모드가 "자동"으로 설정되고 거북이 모양이 다각형이면 해당 다각형은 동일한 선 두께로 그려진다.
    인수가 주어지지 않으면 현재 pensize 반환.

    turtle.pensize()
    turtle.pensize(10)   # from here on lines of width 10 are drawn

    turtle.pen(pen=None, **pendict)

    매개변수
    펜 – 아래에 나열된 키 중 일부 또는 전부가 포함된 dictionary
    pendict – 아래에 나열된 키를 키워드로 포함하는 하나 이상의 키워드 인수

    다음 키/값 쌍을 사용하여 "펜 사전"에서 펜의 속성을 반환하거나 설정

    key value
    “shown” True/False
    “pendown” True/False
    “pencolor” color-string or color-tuple
    “fillcolor” color-string or color-tuple
    “pensize” positive number
    “speed” number in range 0..10
    “resizemode” “auto” or “user” or “noresize”
    “stretchfactor” (positive number, positive number)
    “outline” positive number
    “tilt” number

    이 사전은 이전 펜 상태를 복원하기 위해 pen()에 대한 후속 호출의 인수로 사용 가능.
    이러한 속성 중 하나 이상이 키워드 인수로 제공 가능.
    하나의 명령문에서 여러 펜 속성을 설정하는 데 사용 가능.

    turtle.pen(fillcolor="black", pencolor="red", pensize=10)
    sorted(turtle.pen().items())
    penstate=turtle.pen()
    turtle.color("yellow", "")
    turtle.penup()
    sorted(turtle.pen().items())[:3]
    turtle.pen(penstate, fillcolor="green")
    sorted(turtle.pen().items())[:3]

    turtle.isdown()

    펜이 다운이면 참, 업 상태면 거짓

    turtle.penup()
    turtle.isdown()
    turtle.pendown()
    turtle.isdown()

    More drawing control

    turtle.reset()

    화면에서 거북이 그림을 삭제하고 거북이를 다시 중앙에 놓고 변수를 기본값으로 설정

    turtle.goto(0,-22)
    turtle.left(100)
    turtle.position()
    turtle.heading()
    turtle.reset()
    turtle.position()
    turtle.heading()

    turtle.clear()

    화면에서 거북이의 그림을 삭제
    거북이는 움직이지 않고, 거북이의 상태와 위치는 물론 다른 거북이의 그림에는 영향을 미치지 않는다.

    turtle.write(arg, move=False, align='left', font=('Arial', 8, 'normal'))

    arg – TurtleScreen에 쓸 객체
    move – 참/거짓
    align – "left", "center" 또는 right" 문자열 중 하나
    font – 세 가지(글꼴 이름, 글꼴 크기, 글꼴 유형)

    정렬("왼쪽", "가운데" 또는 "오른쪽")에 따라 현재 거북이 위치에 주어진 글꼴로 텍스트( arg 의 문자열 표현)를 쓴다.
    move가 true이면 펜이 텍스트의 오른쪽 아래 모서리로 이동
    기본적으로 이동은 False

    turtle.write("Home = ", True, align="center")
    turtle.write((0,0), True)

    Using events

    turtle.onclick(fun, btn=1, add=None)

    • fun – 캔버스에서 클릭한 지점의 좌표로 호출되는 두 개의 인수가 있는 함수
    • btn – 마우스 버튼 번호, 기본값은 1(마우스 왼쪽 버튼)
    • add – True 또는 False – True인 경우 새 바인딩이 추가되고, 그렇지 않으면 이전 바인딩을 대체

    fun이 None이면 기존 바인딩이 제거

    def turn(x, y):
        left(180)
    
    onclick(turn)  # Now clicking into the turtle will turn it.
    onclick(None)  # event-binding will be removed

    turtle.onrelease(fun, btn=1, add=None)

    onclick() 참조

    class MyTurtle(Turtle):
        def glow(self,x,y):
            self.fillcolor("red")
        def unglow(self,x,y):
            self.fillcolor("")
    
    turtle = MyTurtle()
    turtle.onclick(turtle.glow)     # clicking on turtle turns fillcolor red,
    turtle.onrelease(turtle.unglow) # releasing turns it to transparent.

    turtle.ondrag(fun, btn=1, add=None)

    turtle.ondrag(turtle.goto)

    그런 다음 거북이를 클릭하고 드래그하면 거북이가 화면 전체로 이동하여 손그림이 생성(펜이 내려진 경우).

    Special Turtle methods

    turtle.begin_poly()

    다각형의 정점 기록 시작. 현재 거북이 위치는 다각형의 첫 번째 정점.

    turtle.end_poly()

    다각형의 정점 기록 중지. 현재 거북이 위치는 다각형의 마지막 정점. 이것은 첫 번째 정점과 연결.

    turtle.get_poly()

    마지막으로 기록된 다각형을 반환.

    turtle.home()
    turtle.begin_poly()
    turtle.fd(100)
    turtle.left(20)
    turtle.fd(30)
    turtle.left(60)
    turtle.fd(50)
    turtle.end_poly()
    p = turtle.get_poly()
    register_shape("myFavouriteShape", p)

    turtle.clone()

    동일한 위치, 방향 및 거북이 속성을 가진 거북이 복제본을 생성하고 반환.

    mick = Turtle()
    joe = mick.clone()

    turtle.getturtle() / turtle.getpen()

    거북이 객체 자체를 반환. 합리적인 사용: "익명 거북이"를 반환하는 함수

    pet = getturtle()
    pet.fd(50)
    pet
    <turtle.Turtle object at 0x...>

    turtle.getscreen()

    거북이가 그리고 있는 TurtleScreen 객체를 반환. 그런 다음 해당 개체에 대해 TurtleScreen 메서드를 호출

    ts = turtle.getscreen()
    ts
    <turtle._Screen object at 0x...>
    ts.bgcolor("pink")

    turtle.setundobuffer(size)

    실행 취소 버퍼를 설정하거나 비활성화. 크기가 정수이면 지정된 크기의 빈 실행 취소 버퍼가 설치. size는 undo() 메서드/함수로 취소할 수 있는 거북이 작업의 최대 수를 제공. 크기가 없음이면 실행 취소 버퍼가 비활성화.

    turtle.setundobuffer(42)

    turtle.undobufferentries()

    undobuffer의 항목 수를 반환.

    while undobufferentries():
        undo()

    Compound shapes

    색상이 다른 여러 다각형으로 구성된 복합 거북 모양을 사용하려면 아래 설명된 대로 헬퍼 클래스 Shape를 명시적으로 사용.

    1 "compound" 유형의 빈 Shape 개체를 생성.

    2 addcomponent() 메서드를 사용하여 원하는 만큼 이 개체에 구성 요소를 추가.

    s = Shape("compound")
    poly1 = ((0,0),(10,-5),(0,10),(-10,-5))
    s.addcomponent(poly1, "red", "blue")
    poly2 = ((0,0),(10,-5),(-10,-5))
    s.addcomponent(poly2, "blue", "red")

    3 이제 화면의 셰이프 목록에 셰이프를 추가하고 사용.

    register_shape("myshape", s)
    shape("myshape")

    참고
    Shape 클래스는 다양한 방식으로 register_shape() 메서드에 의해 내부적으로 사용. 애플리케이션 프로그래머는 위와 같이 복합 도형을 사용할 때만 Shape 클래스를 취급!

    728x90

    댓글

Designed by Tistory.