2013-09-23 47 views
0

試圖檢測並響應Python中的按鍵。我正在使用IDLE和Python 3.3。我有以下的代碼到目前爲止Python - 在shell中檢測按鍵

import msvcrt 

while True: 
    inp = ord(msvcrt.getch()) 

    if (inp != 255): 
     print(inp) 

我有IF語句,因爲如果我只是允許腳本拋出的價值「INP」它只是勺子了255多次。所以我扔了if語句來響應除255之外的任何內容,現在當運行代碼時什麼都不做,只是在shell中輸出實際的按鍵字符。

+0

你的問題是什麼? –

回答

0

這是因爲getch立即讀取輸入,它不會等到輸入內容爲止。當它沒有收到任何輸入時,它將簡單地返回「\ xff」(序數255)。

0

getch函數被設計爲在控制檯中工作,而不是在圖形程序中工作。

當您在圖形化程序中使用它時,它將立即返回\ xff。

如果你在reguler python解釋器中運行你的程序,它不會導致你這個問題。

另外,當你用if語句運行循環時,它會持續運行並使用更多的處理器時間,那麼就需要它。在Windows中,這樣做的唯一正確方法是使用窗口消息,這聽起來像是過度需要您的需求。

0

Python的keyboard模塊具有許多功能。你可以在兩個使用它殼牌控制檯。它也檢測整個Windows的關鍵。
安裝它,也許用這個命令:

pip3 install keyboard 

然後使用它的代碼,如:

import keyboard #Using module keyboard 
while True: #making a loop 
    try: #used try so that if user pressed other than the given key error will not be shown 
     if keyboard.is_pressed('a'): #if key 'a' is pressed 
      print('You Pressed A Key!') 
      break #finishing the loop 
     else: 
      pass 
    except: 
     break #if user pressed other than the given key the loop will break 

你可以將其設置爲多個按鍵檢測:

if keyboard.is_pressed('a') or keyboard.is_pressed('b') or keyboard.is_pressed('c'): # and so on 
    #then do this 

當您安裝該模塊,到文件夾:

python36-32/Lib/site-packages/keyboard 

打開文件_keyboard_event.py in notepad ++。
會有鍵盤事件。
不確定關於他們所有的。
謝謝。