본문 바로가기
Programming/Python

[ L2P ] OnKeyPress()

by The Programmer 2023. 8. 20.

1. Introduction

모바일폰 예제. PyDroid 3에서만 테스트됨. 이번 예제에서는 turtle.onkeypress() 함수 사용법을 살펴보자. 완성된 프로그램에서 스페이스키를 여러번 눌러보면 된다. 스마트폰에서는 스페이스 키 대신 손가락으로 화면 여기 저기 '터치'할 것. ^.^;

 

 

2. Code

 

import turtle
import random

win1 = turtle.Screen()

win1.tracer(2, 50)
# 마름모꼴은 거의 생겨나지 않음. 그리기 속도에 관여한다.
# win1.delay(0)
# 스마트폰 속도 문제로 약간의 마름모꼴 생겨남.
# 너무 빠르게 연속으로 그릴 때에만.

 

t1 = turtle.Pen()


def setupWindow():
     win1.setup(1200, 900, 0, 0)
     win1.title("Hello OnKeyPress! ^.^;")

def box1():
     t1.pu()
     x = random.randint(-600, 600)
     y = random.randint(-450, 450)
     t1.goto(x, y)
     t1.pd()
     for _ in range(4):
         t1.fd(100)
         t1.rt(90)
     # t1.goto(0, 0)    # Check where the point (0, 0) is.

def main():
     setupWindow()
     win1.onkeypress(box1, "space")    # If you hit the SPACE key, then box1 function runs.
     win1.listen()
     win1.mainloop()

main()


"""

 

3. Notes

 

win1.setup(1200, 900, 0, 0)

: setup(a, b, c, d) 함수에서 (a, b)는 생성되는 turtle 윈도우의 크기를 결정하고, (c, d)는 창이 시작되는 위치를 결정한다.

 

■ PyDroid3에서는 화면 설정 크기를 풀스크린의 절반으로 줄여도 전체 화면을 차지하게 되고, 키 패드가 나타나지 않아 키를 입력할 방법이 없게 된다. ㅠ.ㅠ;

안드로이드 폰에서는 , 이 이상의 테스트는 불가.
(아니면 안드로이드폰에 별도로 USB 방식의 키보드를 연결해야 한다.)

■ random 모듈의 사용법 재정리 확인해 둘 것.

 

x = random.randint(-600, 600)

: randint(a, b)에서 두 정수값 a, b 모두 랜덤 선택의 대상에 포함된다. 시작 값(-600)과 끝나는 값(600) 둘 다 모두 포함된다.

cf. randrange(a, b+1)

 

t1.goto(x, y)

: goto()로 가고자하는 좌표가 예상을 벗어날 수 있다. x 좌표 우선, (0, 0) 원점은 왼쪽 상단이 아니다. turtle Module에서의 원점을 뜻한다. LOGO 프로그램의 원점 좌표, 화면의 정중앙 위치와 동일하다.

 

for _ in range(4):

: 밑줄 문자 '_'도 변수다. for i in range(4):에서의 i와 같은 역할을 한다. i와 같은 특정 문자 변수는 재사용이 기대될 때, 밑줄 문자는 재사용되지 않을 것이 거의 확실시 될 때 관례적으로 많이 사용한다. 다만 밑줄 문자를 사용하지 않는다고 문법을 어기는 것은 아니다. 한마디로 밑줄 문자로 쓰는 경우, '이 변수는 여기 이곳 이 외에는 다시는 사용되지 않기 때문에 이 변수에 대해서는 더 이상 신경쓰지 마세요!'의 뜻이 된다.

 

onkeypress(box1, "space")

: onkeypress(실행할 함수명, "키이름") 양식. 키 이름은 파이썬 turtle 모듈에서 정의하고 있는 키 이름과 동일해야 한다. 웬만한 이름들은 상식과 어긋나지 않지만, 그래도 확인은 필요하다.

 

생각해볼 문제 : 키보드에 없는 키들도 있을까?

 

■ 연습문제 1. 이 전에 제시한 예제와 함께 두 예제를 하나로 합쳐보라.

즉, 마우스로 클릭한 자리에 키보드 여러 타이핑에 반응하도록 한다. 랜덤은 필요없거나 혼용할 수도 있을 것이다. 여기에 토글키로 기능을 온오프할 수도 있을 듯.

"""

 

 

4. Files

 

Copy / Paste.

 

 

Happy Programming!

 

^.^;

 

 

 

'Programming > Python' 카테고리의 다른 글

Free IDE - Thonny  (0) 2024.09.08
turtle.pencolor() 함수  (0) 2023.12.10
[ L2P ] 재귀 : 다른 방식의 루프  (0) 2023.09.24
[ L2P ] random Module  (0) 2023.09.10
L2P 연습 : turtle.Screen.onclick() - 001  (0) 2023.08.06