Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import traceback
- class Item:
- SPACE = ' '
- DASH_SPACE = ' - '
- def __init__(self, key, name, function, parent=None):
- self.key = str(key)
- self.name = name
- self.function = function
- self.parent = parent
- if parent:
- parent.add_item(self)
- def __str__(self):
- return self.SPACE + self.key + self.DASH_SPACE + self.name
- def execute(self):
- print('\n' + self.name + '\n')
- return self.function()
- class Menu:
- def __init__(self, name, items=None):
- self.name = name
- self.items = items or []
- def add_item(self, item):
- self.items.append(item)
- if item.parent != self:
- item.parent = self
- def remove_item(self, item):
- self.items.remove(item)
- if item.parent == self:
- item.parent = None
- def __str__(self):
- all = ['', self.name, '']
- for item in self.items:
- all.append(str(item))
- return '\n'.join(all)
- def get_item(self, key):
- for item in self.items:
- if item.key == key:
- return item
- def execute(self):
- while True:
- try:
- print(self)
- choice = raw_input(" >> ")
- try:
- item = self.get_item(choice)
- try:
- item.execute()
- except Exception:
- traceback.print_exc()
- except Exception:
- print('Invalid selection, please try again.\n')
- except KeyboardInterrupt:
- sys.exit()
- if __name__ == "__main__":
- # Pass in methods to run for each menu item
- menu_items = [
- Item(1, 'View Running tasks', view_running_tasks),
- Item(2, 'View Task', view_task),
- # ...
- Item(9, 'Exit', exit)]
- menu = Menu('Task Management', items=menu_items)
- menu.execute()
Add Comment
Please, Sign In to add comment