Python Curses: возвращение в предыдущее меню - PullRequest
2 голосов
/ 09 июля 2011

У меня есть система меню в ncurses. Выбор одного из вариантов приведет вас в другое меню. Но как мне вернуться?

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 Ответ

1 голос
/ 09 июля 2011

Добавить x = 0 после окончания второго цикла while.

(Вам необходимо сбрасывать x каждый раз вокруг цикла, а не только первый. В противном случае выход из первогоменю x будет установлено на «выход», поэтому также выйдет второе меню.)

...