我想找到一種方法來獲取Python中的KeyDown和KeyUp事件。使用Pygame,這可以通過pygame.KEYDOWN
和pygame.KEYUP
輕鬆完成,但我試圖找到一種不使用GUI的方法。沒有GUI的Python鍵盤事件(非阻塞)
理想情況下,我想能夠定義一個函數isKeyDown(key)
,這將返回True
如果key
目前被關押了,還是回到False
如果它不是,但無論哪種方式,它會與代碼繼續前行(這將是非阻塞的)。例如:
while True:
if not isKeyDown("a"): #If 'a' isn't currently being pressed
print ("You are not pressing 'a'")
elif isKeyDown("a"): #If 'a' is being held down when this is run
print ("You are pressing 'a'")
print ("This is the end of this program")
break
我試過msvcrt.getch()
,但有兩個問題:
1),直到一些被按下它停止程序,並
2)它並沒有真正告訴你是否按下了鑰匙;如果在此時按下該鍵,它會簡單地返回。這有時可能會一致,因爲Windows在按下按鍵時會重複按鍵,但在循環以最大速度運行時不太可能發生。
我也用msvcrt.kbhit()
,但它本身如果任何鍵被按下,而不是由msvcrt.getch()
閱讀,使仍然運行進入msvcrt.getch()
的問題並沒有真正返回鍵是否實際上是設置爲1
目前被壓制。
我使用的是Windows,所以許多人用來回答類似問題的curses
模塊不可用。
有沒有一種方法可以在沒有GUI的情況下在Windows中定義這樣的isKeyDown()
函數,最好只使用內置模塊?如果內置的Python模塊無法實現,只要不需要GUI,第三方模塊就可以。
即使使用Pygame或Tkinter也沒關係,只要關閉它們的圖形用戶界面即可。
如果這是不可能的,請告訴我爲什麼,所以我可以停止尋找解決方案(過去幾天我一直在嘗試做其他事情)。
我在64位Windows 10筆記本電腦上使用Python 3.5.2。
請參閱此問題:http://stackoverflow.com/questions/13564851/generate-keyboard-events –
@GaurabDhama:完全無關。這個問題是問,如何**接收**輸入。你鏈接的問題解釋,如何**生成**輸入。 – IInspectable
@GauravDhama我已經看過這個問題,它解釋了_generating_鍵盤事件的方式,而我正在尋找將鍵盤事件作爲_inputs_的方法。 – Sid