2012-10-06 37 views
3

如果按下的鍵是非ASCII,則getch()方法返回主窗口和墊的不同值。例如,按下箭頭鍵,我會在主窗口中獲得預期的KEY_UP,KEY_DOWN等,但是在墊中,我獲得65的向上箭頭和66的向下箭頭。爲什麼會這樣,並且有沒有辦法在pad中獲得大於255的特殊鍵值?curses getch()返回主窗口和python中的墊的不同值

我使用Python 2.6.5。

下面的代碼演示了這個問題:

import curses 

def main(stdscr): 
    c = None 
    while c != curses.KEY_RIGHT: 
     c = stdscr.getch() 
     stdscr.addstr(0, 0, "%3d" % c) 
     stdscr.refresh() 
    pad = curses.newpad(20, 20) 
    while True: 
     c = pad.getch() 
     pad.addstr(0, 0, "%3d" % c) 
     pad.refresh(0, 0, 1, 0, 20, 20) 

if __name__ == '__main__': 
    curses.wrapper(main) 

回答

0

我沒有直接回答你的問題,但我觀察到,65和66是「A」和「B」的ASCII值,這恰好是向上和向下箭頭所使用的CSI或SS3命令。

+0

謝謝@LeoNerd,這讓我在進一步調查的方式。我不熟悉術語CSI和SS3,但發現「CSI是ESC,後面是7位連接的左括號([)或8位連接上的小數位155,SS3是ESC後跟O(大寫字母O)在7位連接上,而在8位連接上則爲小數點143。「 我會點擊「這個答案很有用」,但我沒有足夠的聲望。 – Bjorn

4

你嘗試 pad.keypad(1)

這是我第一次需要處理在Python罵人,我今天早上有同樣的問題。

+0

是的,設置'window.keypad(1)'確保curses爲你解釋轉義序列。 http://docs.python.org/3.4/library/curses.html#curses.window.keypad –

+1

有沒有辦法爲所有窗口自動設置? – augurar