2011-07-09 41 views
2

我在ncurses中有一个菜单系统。 选择其中一个选项可带您到另一个菜单。但我怎么回来?Python诅咒:回到以前的菜单

import curses 

def Main(): 
    x = 0 
    while x!= ord('2'): 
     x = screen.getch() 
     screen.clear();screen.border(); 
     screen.addstr(1,1, "Please choose:") 
     screen.addstr(3,1, "1 - Another Menu") 
     screen.addstr(4,1, "2 - Exit") 

     if x==ord('1'): 
      y = 0 
      while y!= ord('2'): 
       y = screen.getch() 
       screen.clear();screen.border(); 
       screen.addstr(1,1, "Please choose from new menu:") 
       screen.addstr(3,1, "1 - Do Something new") 
       screen.addstr(4,1, "2 - Previous Menu") 
       if y == ord('1'): doSomething() 

      #Here I exit the internal loop. I need to go back to the previous menu, but I don't know how. 
      ## 
    ##exit outside loop and close program 
    ## 
    curses.endwin(); exit(); 

screen = curses.initscr() 
Main() 

理想我需要使用GOTO模块的代码行之间跳转,但我使用的设备没有配备该模块内置。

你们知道其他方法吗?真的很感谢任何帮助。

============更新:==================

好吧,我也意识到,你可以既再生菜单很容易:

import curses 

def Main(): 
    x = 0 
    while x!= ord('2'):   #draws 1st menu 
     screen.clear();screen.border(); 
     screen.addstr(1,1, "Please choose:") 
     screen.addstr(3,1, "1 - Another Menu") 
     screen.addstr(4,1, "2 - Exit") 
     x = screen.getch()   #grab input AFTER first giving options :) 
     if x==ord('1'):    
      y = 0 
      z = 0 
      while y!= ord('2'): #draws 2nd menu 
       screen.clear();screen.border(); 
       screen.addstr(1,1, "Please choose from new menu:") 
       screen.addstr(3,1, "1 - Do Something new") 
       screen.addstr(4,1, "2 - Previous Menu") 
       screen.addstr(6,1, "current loop : "+str(z)) 
       y = screen.getch();  #grabs new input 
       while z!= -1:   #never breaks from loop unless 'break' is called 
        if y == ord('1'): 
         z += 1   
         break #regenerates 2nd menu 
        break #regenerates 1st menu 

      #Here we exit the internal loop. 
      ## 
##exit outside loop and close program 
curses.endwin(); exit(); 

screen = curses.initscr() 
Main() 

回答

1

在第二个while循环结束后添加x = 0

(你需要x时间重置周围循环,不只是第一个。从第一个菜单,否则退出将x设置为“退出”,所以也将退出第二个菜单。)

+0

但我真的不需要使用'break',因为当有人选择“2-Previous Menu”时(因为while!= ord('2')),它会突破内部循环。我只需要以某种方式重新生成第一个菜单。 – tetris11

+0

@tetris:哎呀,对不起,你是对的。看到新的答案。 – katrielalex

+0

啊是的!谢谢! – tetris11