2013-06-26 3 views
1

Я пытаюсь создать систему меню, используя модуль curses. У меня есть следующий код:python curses - .getch() в 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.