기타/What I Learned

[TIL] 파이썬으로 익히는 STEAM 코딩 (21.11.23)

가죽방패 2021. 11. 23. 12:10

※ 자유 낙하 운동 궤적 그리기

- 터틀 스크린을 이용해 자유 낙하 운동의 궤적을 그리는 프로그램을 코딩

import turtle as t				# 터틀 그래픽 모듈인 turtle 을 t로 불러들임

def draw_pos(x, y):				# 터틀의 궤적을 표시하는 함수
    t.clear()
    t.setpos(x, y)
    t.stamp()

    hl = -(t.window_height() / 2)

    tm = 0
    while True:
        d = (9.8 * tm**2) / 2				# 이동거리 계산 - 중력 가속도 9.8m/s
        ny = y - int(d)
        if ny > hl:				# ny의 값이 화면 하달에 도달하지 않았을 경우 계속 반복
            t.goto(x, ny)
            t.stamp()
            tm = tm + 0.3
        else:
            break

t.setup(500, 600)				# 터틀 스크린의 크기
t.shape("circle")				# 터틀 모양 설정
t.shapesize(0.3, 0.3, 0)		# 터틀 모양 크기 설정 (가로, 세로, 테두리)
t.penup()						# 터틀 펜 올림
s = t.Screen()
s.onscreenclick(draw_pos)
s.listen()
t.mainloop()					

# t.mainloop() : 기본 제공되는 IDLE을 사용하지 않을 경우 터틀스크린이 켜지자마자 꺼지는 경우가 있는데
# 이를 방지하기 위해 스크린을 종료할 때까지 마우스와 키보드 입력을 키다리게 하는 코드임

이벤트가 발생하였을 때, 호출되는 함수를 콜백 함수(callback function)이라고 하는데

위 코드에서는 터틀 스크린에서 마우스가 클릭되는 이벤트가 발생할 시

onscreenclick() 함수의 인수로 콜백 함수를 등록할 수 있음

 

onscreenclick() 함수의 두 번째 인수는 보통은 생략되어 있으나 1은 마우스 왼쪽 버튼, 2는 가운데 버튼

3은 오른쪽 버튼을 의미하며 다음과 같이 사용이 가능하다.

t.onscreenclick(draw_pos, 1) # 마우스 왼쪽 버튼
t.onscreenclick(draw_pos, 2) # 마우스 가운데 버튼
t.onscreenclick(draw_pos, 3) # 마우스 오른쪽 버튼