turtle 모듈을 이용하여 위와 같이 원 3개를 스크린창에 띄워보려고 합니다.
from turtle import Turtle, Screen
screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
snake = []
for position in POSITIONS:
snake_segment = Turtle(shape="circle")
snake_segment.color("white")
snake_segment.shapesize(1, 1, 0.1)
snake_segment.penup()
snake_segment.speed("slowest")
snake_segment.goto(position)
snake.append(snake_segment)
screen.exitonclick()
실제로 코드를 실행해보면 왼쪽처럼 실행될 것입니다. (*gif 파일이 약간 깨져서 원이 겹쳐보입니다만 실제로 실행해보면 원이 겹쳐보이지는 않습니다.)
오른쪽처럼 3개의 원이 한번에 뜨도록 할 수는 없을까요??
turtle 모듈의 tracer, update 함수
turtle 모듈의 tracer 함수는 스크린창의 출력을 조절 할 수 있는 함수입니다. (*구체적인 내용은 아래의 표를 참고)
tracer = 0 | tracer = 1 |
코드 0 | 코드 0 |
코드 1 | 코드 1 |
코드 2 | 코드 2 |
코드 0,1,2 한번에 출력가능 | 코드 0,1,2 하나씩 출력 |
from turtle import Turtle, Screen
screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.tracer(0)
POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
snake = []
for position in POSITIONS:
snake_segment = Turtle(shape="circle")
snake_segment.color("white")
snake_segment.shapesize(1, 1, 0.1)
snake_segment.penup()
snake_segment.speed("slowest")
snake_segment.goto(position)
snake.append(snake_segment)
screen.exitonclick()
그럼 tracer함수를 작성하고, 매개변수는 0으로 한 다음 실행해보겠습니다.
실행해보니 아무것도 뜨지 않습니다. 왜냐하면 screen.tracer(0)의 정확한 의미는 코드들이 실행되는 과정을 스크린창에 출력하지 않는 것이기 때문입니다.
이럴때 필요한 함수가 update 함수입니다. 원을 만드는 코드인 for 반복문 아래에 update함수를 넣으면, 원이 생성되는 과정은 보여주지 않으면서 3개의 원이 생성된 결과만 보여줄 수 있습니다.
from turtle import Turtle, Screen
screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.tracer(0)
POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
snake = []
for position in POSITIONS:
snake_segment = Turtle(shape="circle")
snake_segment.color("white")
snake_segment.shapesize(1, 1, 0.1)
snake_segment.penup()
snake_segment.speed("slowest")
snake_segment.goto(position)
snake.append(snake_segment)
screen.update()
screen.exitonclick()
screen.tracer(0)의 영향을 받는 코드들은 정상적으로 실행되고 있으나 스크린창에는 뜨지 않습니다.
하지만 중간 중간에 update 함수를 넣으면 그동안 실행되었던 코드들이 스크린창에 업데이트 되는 효과를 볼 수 있습니다.
그럼 3개씩 총 6개의 원을 스크린에 뜨게 해보겠습니다. 원은 2번에 걸쳐서 스크린에 뜨게 될 것입니다.
from turtle import Turtle, Screen
import time
screen = Screen()
screen.setup(width=600, height=600)
screen.bgcolor("black")
screen.tracer(0)
POSITIONS = [(0, 0), (-20, 0), (-40, 0)]
POSITIONS2 = [(-60, 0), (-80, 0), (-100, 0)]
snake = []
time.sleep(3)
for position in POSITIONS:
snake_segment = Turtle(shape="circle")
snake_segment.color("white")
snake_segment.shapesize(1, 1, 0.1)
snake_segment.penup()
snake_segment.speed("slowest")
snake_segment.goto(position)
snake.append(snake_segment)
screen.update()
time.sleep(3)
for position in POSITIONS2:
snake_segment = Turtle(shape="circle")
snake_segment.color("white")
snake_segment.shapesize(1, 1, 0.1)
snake_segment.penup()
snake_segment.speed("slowest")
snake_segment.goto(position)
snake.append(snake_segment)
screen.update()
screen.exitonclick()
time 모듈의 sleep 함수를 이용하면 원이 출력되는 2번의 과정 사이에 3초의 텀을 줄 수 있습니다.
그래서 중간에 sleep 함수를 추가하였습니다.
실행해보면 위처럼 원이 3개씩 2번에 걸쳐 출력됨을 확인할 수 있습니다.
'IT공부 > 파이썬 (Python)' 카테고리의 다른 글
파이썬 공부 10 - with 구문 (0) | 2020.12.16 |
---|---|
파이썬 공부 9 - 상속 : super class(부모 클래스)와 sub class(자식 클래스) (0) | 2020.12.11 |
파이썬 공부 7 - turtle 모듈과 onkey 함수 (1) | 2020.12.09 |
파이썬 공부 6 - 함수를 매개변수(parameter)로 사용하는 경우 (0) | 2020.12.09 |
파이썬 공부 5 - 튜플 (tuple) (0) | 2020.12.08 |