# -*- coding: utf-8 -*-
"""
Created on Sat Jun 3 00:20:08 2023
@author: dan-s
"""
class MenuItem:
def __init__(self, label, action=None):
self.label = label
self.action = action
class MenuGraph:
def __init__(self):
self.graph = {}
def add_item(self, item, parent=None):
if item not in self.graph:
self.graph[item] = []
if parent:
self.graph[parent].append(item)
def display(self):
self._display_menu("", list(self.graph.keys())[0])
def _display_menu(self, indent, item):
print(indent + item.label)
if item.action:
item.action()
children = self.graph.get(item, [])
for child in children:
self._display_menu(indent + " ", child)
# Exemplo de uso
# Funções de ação
def action1():
print("Executing action 1...")
def action2():
print("Executing action 2...")
def action3():
print("Executing action 3...")
# Criando os itens de menu
item1 = MenuItem("Item 1", action1)
item2 = MenuItem("Item 2", action2)
item3 = MenuItem("Item 3")
item4 = MenuItem("Item 4", action3)
item5 = MenuItem("Item 5")
# Construindo a estrutura do grafo
menu_graph = MenuGraph()
menu_graph.add_item(item1)
menu_graph.add_item(item2, parent=item1)
menu_graph.add_item(item3, parent=item1)
menu_graph.add_item(item4, parent=item3)
menu_graph.add_item(item5, parent=item3)
# Exibindo o menu
menu_graph.display()
"""Neste exemplo, a classe MenuItem representa cada item do menu, assim como no exemplo anterior. A classe MenuGraph é responsável por criar e gerenciar a estrutura do grafo do menu. O método add_item é usado para adicionar um item ao grafo, especificando seu nó pai (ou seja, o item pai no menu). O método display é usado para exibir o menu na tela, percorrendo o grafo e imprimindo os itens de acordo com as conexões definidas.
As funções de ação são definidas da mesma maneira que no exemplo anterior e são executadas quando um item do menu é selecionado.
Você pode personalizar o exemplo, adicionando mais itens ao menu e definindo as conexões desejadas entre eles usando o método add_item. Certifique-se de ajustar o código conforme necessário para atender às suas necessidades específicas."""
Nenhum comentário:
Postar um comentário