我正在嘗試查找本地系統分配給箭頭鍵的值,特別是在Python中。我使用下面的腳本來做到這一點:在Python中查找箭頭鍵的值:它們爲什麼是三元組?
import sys,tty,termios
class _Getch:
def __call__(self):
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
def get():
inkey = _Getch()
while(1):
k=inkey()
if k!='':break
print 'you pressed', ord(k)
def main():
for i in range(0,25):
get()
if __name__=='__main__':
main()
然後我跑了劇本,並創下UP DOWN RIGHT LEFT,這給了我這樣的輸出:
$ python getchar.py
you pressed 27
you pressed 91
you pressed 65
you pressed 27
you pressed 91
you pressed 66
you pressed 27
you pressed 91
you pressed 67
you pressed 27
you pressed 91
you pressed 68
這是不正常的,因爲它表明,箭頭鍵在我的系統中被註冊爲某種形式的三元組(27-91-6x),因爲每按一次箭頭鍵就會佔用get()的三個實例。相比之下,按A,B,C和CTRL-C給出:
you pressed 97
you pressed 98
you pressed 99
you pressed 3
任何人都可以向我解釋爲什麼我的箭頭鍵的值似乎被存儲爲三元?這是爲什麼?這在所有平臺上都是一樣的嗎? (我使用的是Debian Linux。)如果不是,我該如何去存儲箭頭鍵的值?
這裏的最終目標是我正在編寫一個程序,它需要正確識別箭頭鍵並根據哪個箭頭鍵被按下來執行一個功能。
即使缺少由鍵盤發送的轉義碼的清晰部分,我也會建議[ANSI轉義碼](http://en.wikipedia.org/wiki/ANSI_escape_code)它們的格式與從程序發送到終端的格式相同。 –
這似乎是相關的:http://stackoverflow.com/questions/4130048/recognizing-arrow-keys-with-stdin – Newb
爲什麼你有'_Gall'類'__call__'方法,而不是一個'getch'函數? – user2357112