Python功能交互式菜单

时间:2017-08-28 16:12:22

标签: python-2.7

我正在尝试实现一个交互式文本菜单,以简化我的一些较大的代码执行,并且无法弄清楚如何构建它以使其完全正常运行。现在我有一个主菜单,2个子菜单​​和一个退出功能。我需要子菜单来执行我所拥有的特定代码(我稍后会配合),但我写的方式是选项1和2总是会转到我的两个子菜单,无论我在哪里在我的菜单中。编码这个的最佳方法是什么,如果我为第一个选项选择了1,那么我会遇到#1或#2点的其他选项?我显然需要摆脱1和2的常量值,但我不确定如何让它按照我需要的方式工作。

import time, sys, os

    # Main definition - constants
    menu_actions = {}


    ##Menu Functions

    def main_menu():
        os.system('cls')
        print ""
        print 30 * "-", "MENU", 30 * "-"
        print "1. Batch Deployment"
        print "2. Single Deployment"
        print "3. List Tickets"
        print "0. Exit/Quit"
        print 66 * "-"
        print ""
        choice = raw_input(" Make a selection from the menu >>   ")
        exec_menu(choice)


    def batch_menu():
        os.system('cls')
        print "Batch Deployment\n"

        print "1. Run All In Progress Sonic Deployments"
        print "9. Back"
        print "0. Quit"
        print ""
        choice = raw_input(" >>  ")
        exec_menu(choice)
        return


    def ticket_menu():
        os.system('cls')
        print "Choose Task to Deploy...\n"

        print "9. Back"
        print "0. Quit"
        print ""
        choice = raw_input(" >>  ")
        exec_menu(choice)
        return


    def exec_menu(choice):
        os.system('cls')
        ch = choice.lower()
        if ch == '':
            menu_actions['main_menu']()
        else:
            try:
                menu_actions[ch]()
            except KeyError:
                print "Invalid selection, please try again.\n"
                time.sleep(3)
                menu_actions['main_menu']()
        return


    def back():
        menu_actions['main_menu']()

    # Menu definition
    menu_actions = {
        'main_menu': main_menu,
        '1': batch_menu,
        '2': ticket_menu,
        '9': back,
        '0': exit, }

    # Menu Logic

    if __name__ == "__main__":
        # Launch main menu
        main_menu()

1 个答案:

答案 0 :(得分:0)

标记这个回答是因为我最终弄明白了。菜单分支的逻辑被添加到main_menu函数中,我保留了返回的常量并在那里退出,因为我希望它们在整个菜单中都是相同的。