Kivy Keybord Event

 저번에 PingPong을 통해서 대략적인 Kivy를 통한 대략적인 만드는 방법을 알아 봤었는데, 우리에게 필요한 키보드를 입력해서 움직이는 방법은 없었기 때문에 그걸 알아보기 위해 찾아 보았다. 찾아보던 중, PingPong을 응용해서 키보드를 입력받는 방법이 있는 걸 찾았다. 키보드를 입력 받기 위해서는 Window 모듈에 있는
request_keyboard(callback, target, input_type='text')를 이용하면 된다.
<참조 : https://kivy.org/docs/api-kivy.core.window.html#kivy.core.window.WindowBase.request_keyboard>
 이 메소드를 통해서 키보드 값을 요청할 수 있다.


이 메소드를 확인 하기 전에 Kivy Api에서 Window 모듈에서 키보드 입력 예제가 있는걸 볼 수 있다.
<키보드 입력 예제>
<예제 실행 화면>

 예제를 디버깅해서 보면 실행화면이 까맣고, 키를 누르면 입력이 되었다는 걸 표현해주는 걸 볼 수 있다. 그리고 esc를 누르면 더 이상 키 값이 입력이 안 된다.
 처음부터 보면 위젯을 생성시켜 준 뒤에 __init__을 통해 생성자를 만들어 _keyboard 값에 Window.request_keyboard()를 전달해서 사용할 수 있게 설정을 했다. 그리고 bind()를 설정해서 키보드 값을 입력받을 준비를 해준다. 그리고 _on_keyboard_down 메소드를 통해 키보드 값을 입력 받으면 어떤 식으로 처리 할지 만들어 준다. 그리고 메소드가 받는 변수를 보면 keycode, text, modifiers 변수가 있는데, 출력되는 걸 보면 각각 어떤 걸 의미하는 지 알 수 있다. 보다시피 keycord에는 아스키코드 값과, 입력된 문자를 볼 수 있다. 그리고 text에서는 아스키코드 값 말고 텍스트만을 표현해 주고, 만일 modifier와 함께 입력되었다면, modifier에서 따로 출력이 된다. 그리고 esc를 입력받으면 keyboard.release()가 실행되도록 했는데 이를 통해 더 이상 키보드 입력 값을 받지 않도록 한다. 보면 그와 동시에 _keyboard_down()이 실행되어 출력된 것도 확인 할 수 있다. 이를 통해서 키보드 값을 어떤식으로 받아오고 출력할 수 있는지에 대해 간단하게 알아 보았다.

 그러면 이제 PingPong을 응용해서 키보드로 입력할 수 있도록 설정을 해보자. 먼저, 새롭게 import를 해주어야한다.

from kivy.core.window import Window
를 import해준다.

 그리고 원래는
<on_touch_move>
 를 통해서 마우스를 이용해 움직이던 부분을 지워준다.

<함수 변형>
 그리고 이런식으로 키보드로 움직일 수 있도록 변형해준다. 이외에 serve_ball부분과 update부분은 건드리지 않고 그대로 놓는다. 메소드를 설정해 준 것을 보면, 우선 __init__부분과 _keyboard_closed 부분은 거의 유사한 것을 볼 수 있다. 그 다음에 키보드를 입력 받았을 때의 처리부분인 _on_keyboard_down() 부분을 통해 움직임을 설정해주었다. keycode[1]이 입력된 값이 저장된 부분이라는걸 볼 수 있고, 'w'와 's'를 통해 player1의 움직임을 제어했고, 'up'과 'down'을 통해서 player2의 움직임을 제어해준다. 이를 실행해보면 같은 게임을 키보드 'w', 's', 'up', 'down'을 통해서 움직일 수 있는걸 확인 할 수 있다. 

 이를 통해서 키보드를 이용한 kivy 내의 움직임을 제어하는 방법을 공부했다. 이제는 이를 이용해서 테트리스에서 블록의 움직임, 블록 변형을 할 수 있을 것 같다.


댓글

이 블로그의 인기 게시물

KV Language(Pycharm에 Highlighting 기능 설정하기)

Python 코딩 공부 시작과 Github 활용

Kivy Tutorial - PingPong