2013-06-26 30 views
1

我正在嘗試使用curses模塊製作菜單系統。我有以下代碼:python curses - .getch()in newwin不起作用

import sys, os, traceback, curses 

def main(scrn): 
    screen = scrn 
    screen.border(0) 
    curses.start_color() 
    curses.init_pair(2,curses.COLOR_WHITE,curses.COLOR_BLUE) 

    while True: 
     event = screen.getch() 
     if event == ord("q"): 
      break 
     elif event == curses.KEY_RIGHT: 
      #enter function containing while loop, passing job 
      job_sub() 


#loop to hand the subscreen for a job element 
def job_sub(): 

    screen = curses.newwin(5, 10, 3, 3) 
    screen.box() 
    objects =["RUN", "MAINTAIN", "EDIT"] 

    for i in range(len(objects)): 
     if i == 0: 
      screen.addstr(i+1,1, objects[i], curses.color_pair(2)) 
     else: 
      screen.addstr(i+1,1, objects[i]) 

    screen.refresh() 

    while True: 
     event = screen.getch() 
     if event == curses.KEY_LEFT: 
      break 

    screen.erase() 
    return 

if __name__=='__main__': 
    try: 
     # Initialize curses 
     screen=curses.initscr() 
     curses.noecho() 
     curses.cbreak() 
     screen.keypad(1) 

     main(screen) 

     screen.keypad(0) 
     curses.echo() 
     curses.nocbreak() 
     curses.endwin() 
    except: 
     # In event of error, restore terminal to sane state. 
     screen.keypad(0) 
     curses.echo() 
     curses.nocbreak() 
     curses.endwin() 
     traceback.print_exc() 

程序一直運行,直到我點擊右箭頭鍵。之後,它會凍結,就像它陷入循環一樣。它不會迴應任何更多的輸入。任何幫助表示讚賞。

回答

2

在您的job_sub()函數中,您將創建一個新窗口,但不啓用小鍵盤。因此,箭頭鍵不會發送curses.KEY_LEFT值。