2015-02-04 3 views
3

에 NUMLOCK/CAPSLOCK/SCRLOCK 키 누르기 /의 keyup을 감지, 나는 "콜백"기능 때 등록처럼 NUMLOCK의 키를 (또는 의 keyup)를 감지 할 눌렀다.내가 개발하고 있어요 게임에서 파이썬

주어진 시간에 상태을 읽는 것을 요구하지 않으며 I can do that already 값을 변경하고 싶지 않습니다. Keypress 이 발생하면이 발생하므로 10 분의 1 초마다 상태를 폴링 할 필요가 없습니다.

게임은 curses을 사용하며 현재 차단은 getch()입니다. Curses는 NUMLOCK keypresses를 감지하지 못했고 (led- related 키보드는 어떤 키도 "생성하지"않을 것입니다), 결코 그렇게 할 수있는 방법이 없는지 궁금합니다. 주요 curses 루프를 non-blocking getch()을 호출하고 keyboard_leds() 함수를 호출하여 현재 상태를 읽습니다.

예를 들어 : 내가 인수로 자사의 stdscr 화면을 전달 저주를 초기화 한 후 새 스레드를 시작할 수 있고, 해당 스레드는 NUMLOCK 키를 누를 때의 이벤트에 대한 콜백 함수 (예를 들어, special_keypress())를 등록 등록 할 것입니다. 따라서이 함수는 필요한 경우에만 keyboard_leds()을 호출 한 다음 stdscr을 업데이트합니다.

이것이 가능한지 확신 할 수 없으며 일부 아키텍처 종속 항목 (커널/X11 등)으로 이동해야 할 수도 있습니다. 따라서 크로스 플랫폼 솔루션 인 경우 가능하지 않다면 Linux 만 사용하는 것이 좋습니다.

+0

가능성있는 속? http://stackoverflow.com/questions/10054681/capslock-numlock-insert-how-to-show-keyboard-status-on-screen-when-keyboard-h –

+0

@MarcB : 관련성이 * 있습니다. * 중복과는 거리가 멀다. 그는 앱이 자신의 DE에 상태를 표시하기 위해 데몬으로 실행되기를 원합니다. 그것은 프로그래밍 문제조차되지 않습니다! – MestreLion

답변

2

OK, 스팀 해머를 사용하여 너트를 깨는 것과 같습니다 (특히 CLI와 같은 게임을 만드는 경우). 그러나 Pyglet은 OS X에서 NUMLOCK 이상의 키 누르기를받습니다. CAPSLOCK 또는 SCROLLLOCK이지만 내 시스템 단축키는 가능한 모든 방법으로 오버 라이딩됩니다. 따라서 나만의 문제 일 수 있습니다.

더 잘 작동하는지 테스트하고 Pyglet이 이러한 키를 감지하는 방법을 살펴볼 수 있습니다.

import pyglet 

from pyglet.window import key 


window = pyglet.window.Window() 


@window.event 
def on_key_press(symbol, modifiers): 
    if symbol == key.NUMLOCK: 
     print 'NumLock was pressed, yay!' 
    elif symbol == key.CAPSLOCK: 
     print 'CapsLock was pressed, yay!' 
    elif symbol == key.SCROLLLOCK: 
     print 'ScrollLock was pressed, yay!' 


@window.event 
def on_draw(): 
    window.clear() 


if __name__ == '__main__': 
    pyglet.app.run() 
+0

그래,'파이 그릿'은 그 너트에 대한 거대한 망치입니다. 나는 주도적 인 지위를 위해서 창을 만들 여유가 없다. 실제로 'CLI'가 실행 중일 수도 있습니다. :) 그러나 어쨌든 노력에 감사드립니다. – MestreLion

+0

@MestreLion 문제는 없지만 더 나은 방법을 찾으려고 계속 파고 있습니다. 결국 일반 LED 폴링이 그렇게 나쁘지는 않다고 생각합니다. CPU 사용량이 많아서는 안됩니다. –

+0

그건 내 백업 계획입니다. 그래서 어둠 속에서 더 나은 대안이 있는지보기위한 총소리입니다. – MestreLion

관련 문제