Return from a sub menu to the main menu of a function in Python

1

I created a simple Python application for an agenda system with Sqlite3. There are 3 files in the main menu agenda.py o contato.py and usuario.py that will log in to the system.

In the file 'agenda.py' I log in the user by calling the login function (connection, login, password) that is in the file 'user.py' which returns me the menuContact () function that is in the contacts file .py ', within this menu option 6 is exit leaving returning to the initial login menu of the file' agenda.py 'that is where I can not return to this home screen

Below is the code I'm using.

Schedule.py

from usuario import *
from contatos import *
import getpass

print("\n3[47m3[31mConectando no banco...3[0;0m\n")
conexao = sqlite3.connect("banco.sqlite")

print("\n--- Efetuar Login no Sistema ---\n")

usuario = input("Por favor, informe o usuário: ")

senha = getpass.getpass("Por favor, informe a senha: ")

login(conexao, usuario, senha)

print("\n3[47m3[31mFechando conexão com o banco...3[0;0m\n")
conexao.close()

contacts.py

from usuario import *

# --- Função para criar a tabela ----
def criar_tabela_contato(conexao):

    cursor = conexao.cursor()

    sql = """
        CREATE TABLE IF NOT EXISTS contato (
            nome text,
            fone text,
            email text,
            usuario integer
        );
    """

    cursor.execute(sql)

    conexao.commit()
# --------------------------------------------

#  --- Função para inserir o contato ---
def inserir_contato(conexao, nome, telefone, email, id):

    cursor = conexao.cursor()

    sql = """
        INSERT INTO contato VALUES(
            '{}',
            '{}',
            '{}',
             {}
        );
    """.format(nome, telefone, email, id)

    cursor.execute(sql)

    conexao.commit()
# --------------------------------------------

# --- Função para listar contatos ---
def listar_contato(conexao):

    cursor = conexao.cursor()

    sql = "SELECT rowid, * FROM contato ORDER BY nome;"

    cursor.execute(sql)

    contato = cursor.fetchall()

    print("3[32mId Nome    Telefone     E-mail3[0;0m\n")
    print("3[32m== ======= ===========  ================3[0;0m\n")
    for cont in contato:
        print("{}: {} - ({}) -".format(cont[0], cont[1], cont[2]), cont[3] )
# -----------------------------------------------------------

# --- Função para excluir contatos ---
def excluir_contato(conexao, id):

    cursor = conexao.cursor()

    sql = """
        DELETE FROM contato
        WHERE rowid = {};
    """.format(id)

    cursor.execute(sql)

    conexao.commit()
# ---------------------------------------------------------------

# --- Função para buscar contatos ---
def buscar_contato(conexao, nome):

    cursor = conexao.cursor()

    sql = "SELECT rowid, * FROM contato WHERE nome LIKE '%{}%';".format(nome)

    cursor.execute(sql)

    contato = cursor.fetchall()

    print("3[32mId Nome    Telefone  E-mail3[0;0m\n")
    print("3[32m== ======= ========  ================3[0;0m\n")
    for cont in contato:
        print( "{}: {} - ({}) -".format(cont[0], cont[1], cont[2]), cont[3] )
# ----------------------------------------------------------------

# --- Função para alterar contatos ---
def alterar_contato(conexao, nome, telefone, email, id):

    cursor = conexao.cursor()

    sql = "UPDATE contato SET nome = '{}', fone = '{}', email = '{}' WHERE rowid = {}".format(nome, telefone, email, id)

    cursor.execute(sql)

    conexao.commit()
# -----------------------------------------------------------------------------------------------------------------------

# ========== Menu Principal ==========
def menuContatos():
    print("\n3[47m3[31mConectando no banco...3[0;0m\n")
    conexao = sqlite3.connect("banco.sqlite")

    opcao = 0
    while opcao != 6:
        print("""3[32m
Em relação aos contatos do sistema, você deseja...

        1 - Inserir
        2 - Buscar
        3 - Listar
        4 - Alterar
        5 - Excluir
        6 - Retornar
3[0;0m""")

        opcao = int(input("3[32mInforme a opção desejada: 3[0;0m"))

        if opcao == 1:
            print("\n3[47m3[30m--- Digite os dados do contato ---3[0;0m\n")

            while True:
                n = input("Nome: ")
                if n == "":
                    print("\n3[47m3[30mEspaço vazio! Digite um nome...3[0;0m")
                else:
                    break

            while True:
                t = input("Telefone: ")
                if t == "":
                    print("\n3[47m3[30mEspaço vazio! Digite um telefone...3[0;0m")
                else:
                    break

            while True:
                e = input("E-mail: ")
                if e == "":
                    print("\n3[47m3[30mEspaço vazio! Digite um endereço de e-mail...3[0;0m")
                else:
                    break

            while True:
                i = int(input("Id: "))
                if i == "":
                    print("\n3[47m3[30mEspaço vazio! Digite um Id...3[0;0m")
                else:
                    break

            print("\n3[47m3[30m--- Contato inserido com sucesso ---3[0;0m\n")

            inserir_contato(conexao, n, t, e, i)

        elif opcao == 2:
            print("\n3[47m3[30m--- Buscar Registro ---3[0;0m\n")

            nome = input("Digite o nome do contato: ")
            print("\n3[47m3[30m--- Registros Encontrados ---3[0;0m\n")
            buscar_contato(conexao, nome)

        elif opcao == 3:
            print("\n3[47m3[30m--- Lista de contatos cadastrados ---3[0;0m\n")
            listar_contato(conexao)

        elif opcao == 4:
            print("\n3[47m3[30m--- Alteraçao de Contatos ---3[0;0m\n")

            n = input("Nome: ")
            t = input("Telefone: ")
            e = input("Email: ")
            i = int(input("Id: "))
            alterar_contato(conexao, n, t, e, i)
            print("\n3[47m3[30m--- Alteração realizada com sucesso ---3[0;0m\n")

        elif opcao == 5:
            print("\n3[47m3[30m--- Exclusão de Registro ---3[0;0m\n")

            id = input("Digite o ID para do contato para excluir: ")
            excluir_contato(conexao, id)
            print("\n3[47m3[30m--- Contato excluido com sucesso ---3[0;0m")

        elif opcao == 6:
            print("\n3[47m3[30m--- Retornando para o Menu Agenda ----3[0;0m\n")
            return login(conexao, usuario, senha)


    print("\n3[47m3[31mFechando conexão com o banco...3[0;0m\n")
    conexao.close()

users.py

import sqlite3
from contatos import *

# ---  Funções do Programa ---

# --- Função 1: Criação da Tabela ---
def criar_tabela_usuario(conexao):

    cursor = conexao.cursor()

    sql = """
        CREATE TABLE IF NOT EXISTS usuario(
            nome text,
            login text,
            senha text
        );
    """

    cursor.execute(sql)
# ---------------------------------------------------

# --- Função 2: Inserir Usuário ---
def inserir_usuario(conexao, nome, login, senha):

    cursor = conexao.cursor()

    sql = """
        INSERT INTO usuario VALUES(
            '{}',
            '{}',
            '{}'
        );
    """.format(nome, login, senha)

    cursor.execute(sql)

    conexao.commit()
# ---------------------------------------------------

# --- Função 3: Listar Usuários ---
def listar_usuarios(conexao):

    cursor = conexao.cursor()

    sql = "SELECT rowid, * FROM usuario ORDER BY nome;"

    cursor.execute(sql)

    usuarios = cursor.fetchall()

    print("3[34mId Nome    Login\n3[0;0m")
    print("3[34m== ======= =========\n3[0;0m")
    for usr in usuarios:
        print( "{}: {} - ({})".format(usr[0], usr[1], usr[2]) )
# ---------------------------------------------------------------

# --- Função 4: Excluir Usuários ---
def excluir_usuario(conexao, id):

    cursor = conexao.cursor()

    sql = """
        DELETE FROM usuario
        WHERE rowid = {};
    """.format(id)

    cursor.execute(sql)

    conexao.commit()
# ---------------------------------------------------------------

# --- Função 5: Buscar Usuários ---
def buscar_usuario(conexao, nome ):

    cursor = conexao.cursor()

    sql = "SELECT rowid, * FROM usuario WHERE nome LIKE '%{}%';".format(nome)

    cursor.execute(sql)

    usuario = cursor.fetchall()

    print("3[34mId Nome    Login\n3[0;0m")
    print("3[34m== ======= ========\n3[0;0m")
    for usr in usuario:
        print( "{}: {} - ({})".format(usr[0], usr[1], usr[2]))
# -----------------------------------------------------------------

# --- Função 6: Alterar Contatos --
def alterar_usuario(conexao, nome, login, senha, id):

    cursor = conexao.cursor()

    sql = "UPDATE usuario SET nome = '{}', login = '{}', senha = '{}' WHERE rowid = {}".format(nome, login, senha, id)

    cursor.execute(sql)

    conexao.commit()

# ----------------------------------------------------------------------------------------------------------------

#  --- Função 7: Login Menu Principal ---
def login(conexao, login, senha):

    cursor = conexao.cursor()

    sql = "SELECT rowid, * FROM usuario WHERE login LIKE '{}' AND senha LIKE '{}';".format(login, senha)

    cursor.execute(sql)

    usuario = cursor.fetchall()

    if usuario:
        for usr in usuario:
            print( "\n--- Bem Vindo! ---\n\n--- {} ---\n".format(usr[1]))
            return menuContatos()
    else:
        print("\n--- Usuário inválido! ---\n")
        print("...Retornado para o Menu Agenda...\n")

# -----------------------------------------------------------------------------------------------------------------

# --- Menu Principal do Programa ---

def menuUsuario():
    print("\n3[47m3[31mConectando no banco...3[0;0m\n")
    conexao = sqlite3.connect("banco.sqlite")

    opcao = 0
    while opcao != 6:
        print("""3[34m
Em relação aos usuários do sistema, você deseja...

        1 - Inserir
        2 - Buscar
        3 - Listar
        4 - Alterar
        5 - Excluir
        6 - Voltar
3[0;0m""")

        opcao = int(input("3[34mOpção desejada: 3[0;0m"))

        if opcao == 1:
            print("\n3[47m3[30m\--- Digite os dados do usuário ---3[0;0m\n")

            while True:
                n = input("Nome: ")
                if n == "":
                    print("\n3[47m3[30mEspaço vazio! Digite um nome...3[0;0m\n")
                else:
                    break

            while True:
                l = input("Login: ")
                if l == "":
                    print("\n3[47m3[30mEspaço vazio! Digite um login...3[0;0m\n")
                else:
                    break

            while True:
                s = input("Senha: ")
                if s == "":
                    print("\n3[47m3[30mEspaço vazio! Digite um senha...3[0;0m\n")
                else:
                    break

            print("\n3[47m3[30m--- Contato inserido com sucesso ---3[0;0m\n")

            inserir_usuario(conexao, n, l, s)

        elif opcao == 2:
            print("\n3[47m3[30m--- Buscar registro ---3[0;0m\n")

            nome = input("Digite o nome do usuário para a busca: ")
            print("\n3[47m3[30m--- Registros Encontrados ---3[0;0m\n")
            buscar_usuario(conexao, nome)

        elif opcao == 3:
            print("\n3[47m3[30m--- Lista de usuário cadastrados ---3[0;0m\n")
            listar_usuarios(conexao)

        elif opcao == 4:
            print("\n3[47m3[30m--- Alteração de Usuários ---3[0;0m\n")

            n = input("Nome: ")
            l = input("Login: ")
            s = input("Senha: ")
            i = input("Id: ")
            alterar_usuario(conexao, n, l, s, i)
            print("\n3[47m3[30m--- Alteração realizada com sucesso ---3[0;0m\n")

        elif opcao == 5:
            print("\n3[47m3[30m--- Exclusão de registro ---3[0;0m\n")

            id = input("Digite o ID para do contato para excluir: ")
            excluir_usuario(conexao, id)
            print("\n3[47m3[30m--- Usuário excluido com sucesso ---3[0;0m\n")

        elif opcao == 6:
            print("\n3[47m3[30m--- Voltando ----3[0;0m\n")
            break
    # Fechando a conexão (ligação) com o banco
    print("\n3[47m3[31mFechando conexão com o banco...3[0;0m\n")
    conexao.close()
    
asked by anonymous 11.10.2018 / 00:30

1 answer

0

The problem is that your main menu is not within the while, but in the scope of the main module, so it does not repeat itself! after he finishes the program is over! Just indent it properly.

I checked below with a _ the spaces that I added, for you to see the area that was missing indent:

from usuario import *
from contatos import *
import getpass

# Menu Principal Agenda ---
print("\n3[47m3[31mConectando no banco...3[0;0m\n")
conexao = sqlite3.connect("banco.sqlite")

opcao = 0
while opcao != 2:
    print("""--- Menu Agenda ---

    1 - Entrar
    2 - Sair
    """)

____opcao = int(input("Escolha uma das opções: "))
____if opcao == 1:
____    print("\n--- Efetuar Login no Sistema ---\n")
____    usuario = input("Por favor, informe o usuário: ")
____    senha = getpass.getpass("Por favor, informe a senha: ")
____    login(conexao, usuario, senha)
____elif opcao == 2:
____    print("\nFechando o programa....\n")
____    break

print("\n3[47m3[31mFechando conexão com o banco...3[0;0m\n")
conexao.close()

EDIT:

In addition to making the above change, you should change line 187 of contatos.py , that line here:

return login(conexao, usuario, senha)

It should look like this:

return

It was the function login() that called the function menuContatos() ... then to return to the function login() just exit the function menuContatos() with return , without calling the function login() again. / p>

This will cause the login() function to finish as well and then the code execution stream will come back to repeat the "Calendar Menu" via the while I put in the first part of my answer, just above. p>     

11.10.2018 / 03:45