2015-06-19 65 views
0

爲什麼當我運行這個代碼時,box.getch()返回一個錯誤的值,當我將box.getch()更改爲screen.getch()時,它返回正確的值?我一直在尋找互聯網,並沒有人說getch()只適用於屏幕。如果按下其中一個箭頭,它將返回27,這是ESC的字符。 (此代碼應打印的字符,直到用戶按ESC ...)Python Curses window.getch()返回錯誤的值

import curses 
screen = curses.initscr() 
curses.noecho() 
curses.cbreak() 
curses.start_color() 
screen.keypad(1) 
curses.init_pair(1,curses.COLOR_BLACK, curses.COLOR_CYAN) 
highlightText = curses.color_pair(1) 
normalText = curses.A_NORMAL 
screen.border(0) 
curses.curs_set(0) 
box = curses.newwin(22, 64, 1, 1) 
box.box() 
box.addstr(14, 3, "YOU HAVE PRESSED: ") 

screen.refresh() 
box.refresh() 

x = box.getch() 
while x != 27: 
    box.erase() 
    box.addstr(14, 3, "YOU HAVE PRESSED: " + str(x)) 
    screen.border(0) 
    box.border(0) 
    screen.refresh() 
    box.refresh() 
    x = box.getch() 

curses.endwin() 
exit() 
+0

您是否可以將示例降低到最低限度? –

+0

你的意思是?它發生,如果我按下curses.KEY_DOWN box.getch()返回27這是ESC值 –

+1

除了@彼得的評論,你可能想讀[問]。 – boardrider

回答

1

答案(見Bug with refresh in python curses)是添加box.keypad(1)。有幾行是不必要的 - 在示例中標出了這些行:

 
    import curses 
    screen = curses.initscr() 
    curses.noecho() 
    curses.cbreak() 
    curses.start_color() 
    screen.keypad(1) # delete this line 
    curses.init_pair(1,curses.COLOR_BLACK, curses.COLOR_CYAN) 
    highlightText = curses.color_pair(1) 
    normalText = curses.A_NORMAL 
    screen.border(0) 
    curses.curs_set(0) 
    box = curses.newwin(22, 64, 1, 1) 
    box.keypad(1) 
    box.box() 
    box.addstr(14, 3, "YOU HAVE PRESSED: ") 

    screen.refresh() # delete this line 
    box.refresh() 

    x = box.getch() 
    while x != 27: 
     box.erase() 
     box.addstr(14, 3, "YOU HAVE PRESSED: " + str(x)) 
     screen.border(0) 
     box.border(0) 
     screen.refresh() # delete this line 
     box.refresh()  # delete this line 
     x = box.getch() 

    curses.endwin() 
    exit()