2013-08-14 2 views
5

저는 응용 프로그램을 가지고 있으며 사용자가 RETURN/ENTER를 누를 때마다 입력이있는 def로 이동하기를 원합니다. 이Python - keypress를 감지합니다.

while True: 
    z = getch() 
    # escape key to exit 
    if ord(z) == 9: 
     self.command() 
     break 
    if ord(z) == 27: 
     print "Encerrando processo.." 
     time.sleep(2) 
     sys.exit() 
     break 

그러나 그것은 단지 블록을 내가 더 많은 코드가 있다면 그것은 동안이 파손 된 경우에만 실행되지 않습니다

이 코드를 사용하고 있습니다. 나는 tkinter를 사용할 수 없다!

키를 누른 경우에만 실행되는 항목이 있습니까? 반복하지 않고.

+0

http://stackoverflow.com/questions/1258566/how-to-get-user-input-during-a-while-loop-without-blocking이 도움이 될 수 있습니다. – cptroot

+0

"나는 등록 할 필요가 없기 때문에 수퍼 유저입니다. 그러나 여기에 우리가갑니다."- 그냥 fyi, 그건 받아 들일 수 없습니다. 다른 사이트에 등록 할 필요가 없도록 잘못된 사이트에 게시하는 것이 좋다고 생각하는 이유는 무엇입니까?! – ThiefMaster

답변

0

당신이 찾고있는 것처럼 들리는 것은 입력을 기반으로하는 while 루프입니다. 원하는 상태 목록을 배열에 넣으면 매번 입력을 검사하여 그 입력이 잡으려는 입력 중 하나인지 확인할 수 있습니다. 당신이 키 검출기를 실행하는 새 스레드를 만드는 것입니다 할 수있는 방법의

z = getch() 
chars = [9, 27] 
while ord(z) not in chars: 
    z = getch() 

if ord(z) == 9: 
    do_something() 
if ord(z) == 27: 
    do_something_else() 

do_more_things() 
4

하나. 다음은 그 예입니다.

스레드의 start() 함수를 호출 할 때까지는 while 루프가 실행되지 않습니다. 또한 자동으로 함수를 반복하지 않으므로 코드 반복을 위해 루프를 반복해야합니다. 그 코드가 아닌 별도의 스레드에서, 다른 모든 코드와 인라인 실행하는 원인이됩니다

마십시오 하지 호출 명시 적으로 스레드의 run() 함수. 새로운 스레드를 만들 수 있도록 threading.Thread에 정의 된 start() 함수를 사용해야합니다.

참고 : atexit 모듈을 사용하려는 경우 새 스레드를 만들면 해당 모듈이 올바르게 작동하지 않게됩니다. 그냥 머리 - 업. :)

이 도움이 되었기를 바랍니다.

관련 문제