Open MSAdministrator opened 2 years ago
Hi @MSAdministrator ,
Here is a simple example showing submenus going 4 levels deep. There is no limit to how many submenu levels you can have. Each submenu is just an instance of ConsoleMenu (or SelectionMenu), that is launched with a SubmenuItem. Just make sure to provide the "parent" menu, so the child menu knows where to navigate when returning.
This is just a contrived example that doesn't do anything useful, but hopefully it helps with understanding how the submenuing works.
from consolemenu import *
from consolemenu.items import *
def example_menu_item_handler(*args):
pu = PromptUtils(Screen())
# <Printing here just as an example - do actual stuff here>
pu.println("You selected {} menu item {}\n".format(args[0], args[1]))
pu.enter_to_continue()
def main():
# Create the root menu
root_menu = ConsoleMenu("Root Menu", "This is the Root Menu")
################################################################################
# Submenu 1.1.1.1 (Level 4)
sub1_1_1_1 = ConsoleMenu("Sub-Menu 1.1.1.1", "This is Sub-Menu 1.1.1.1")
sub1_1_1_1.append_item(FunctionItem("Item 1", example_menu_item_handler, ['submenu 1.1.1.1', 1]))
sub1_1_1_1.append_item(FunctionItem("Item 2", example_menu_item_handler, ['submenu 1.1.1.1', 2]))
# Submenu 1.1.1.2 (Level 4)
sub1_1_1_2 = ConsoleMenu("Sub-Menu 1.1.1.2", "This is Sub-Menu 1.1.1.2")
sub1_1_1_2.append_item(FunctionItem("Item 1", example_menu_item_handler, ['submenu 1.1.1.2', 1]))
sub1_1_1_2.append_item(FunctionItem("Item 2", example_menu_item_handler, ['submenu 1.1.1.2', 2]))
# Submenu 1.1.1.3 (Level 4)
sub1_1_1_3 = ConsoleMenu("Sub-Menu 1.1.1.3", "This is Sub-Menu 1.1.1.3")
sub1_1_1_3.append_item(FunctionItem("Item 1", example_menu_item_handler, ['submenu 1.1.1.3', 1]))
sub1_1_1_3.append_item(FunctionItem("Item 2", example_menu_item_handler, ['submenu 1.1.1.3', 2]))
################################################################################
# Submenu 1.1.1 (Level 3)
sub1_1_1 = ConsoleMenu("Sub-Menu 1.1.1", "This is Sub-Menu 1.1.1")
sub1_1_1.append_item(SubmenuItem("Open Sub-Menu 1.1.1.1", submenu=sub1_1_1_1, menu=sub1_1_1))
sub1_1_1.append_item(SubmenuItem("Open Sub-Menu 1.1.1.2", submenu=sub1_1_1_2, menu=sub1_1_1))
sub1_1_1.append_item(SubmenuItem("Open Sub-Menu 1.1.1.3", submenu=sub1_1_1_3, menu=sub1_1_1))
# Submenu 1.1.2 (Level 3)
sub1_1_2 = ConsoleMenu("Sub-Menu 1.1.2", "This is Sub-Menu 1.1.2")
sub1_1_2.append_item(FunctionItem("Item 1", example_menu_item_handler, ['submenu 1.1.2', 1]))
sub1_1_2.append_item(FunctionItem("Item 2", example_menu_item_handler, ['submenu 1.1.2', 2]))
sub1_1_2.append_item(FunctionItem("Item 3", example_menu_item_handler, ['submenu 1.1.2', 3]))
################################################################################
# Submenu 1.1 (Level 2)
sub1_1 = ConsoleMenu("Sub-Menu 1.1", "This is Sub-Menu 1.1")
sub1_1.append_item(SubmenuItem("Open Sub-Menu 1.1.1", submenu=sub1_1_1, menu=sub1_1))
sub1_1.append_item(SubmenuItem("Open Sub-Menu 1.1.2", submenu=sub1_1_2, menu=sub1_1))
################################################################################
# Submenu 1 (Level 1)
sub1 = ConsoleMenu("Sub-Menu 1", "This is Sub-Menu 1")
sub1.append_item(SubmenuItem("Open Sub-Menu 1.1", submenu=sub1_1, menu=sub1))
################################################################################
# Add root menu items (Level 0)
root_menu.append_item(SubmenuItem("Open Sub-Menu 1", submenu=sub1, menu=root_menu))
# Show the menu
root_menu.start()
root_menu.join()
if __name__ == "__main__":
main()
Hello, this is a request for an example / documentation changes regarding having multiple menus layered upon themselves. I have looked through all the examples and cannot figure out how to do this.
My specific example is three layers deep.
Main Menu -> Submenu -> Sub-Submenu
Do you mind providing an example and in return I will write up the docs for it.
Thanks for the help!