Crie um Menu Em Tempo Real em Python: Sem Necessidade da Tecla Enter!

Criar menus interativos em Python pode frequentemente ser simples e direto. No entanto, se você está buscando aprimorar a experiência do usuário permitindo que seleções sejam feitas com uma tecla, em vez de fazer o usuário pressionar Enter, você pode se encontrar em uma pequena enrascada. Neste post do blog, exploraremos o problema de precisar da tecla Enter para confirmar escolhas de menu e introduziremos uma solução que aproveita a detecção de entrada do teclado.

Entendendo o Problema

Em aplicações de console tradicionais, métodos de entrada do usuário como raw_input() (ou apenas input() no Python 3) normalmente exigem que os usuários pressionem a tecla Enter após selecionar uma opção. Isso pode prejudicar a experiência do usuário, especialmente no contexto de menus onde uma resposta rápida é desejada.

O código existente que o usuário forneceu é o seguinte:

import sys
print """Menu
1) Dizer Foo
2) Dizer Bar"""
answer = raw_input("Faça uma seleção> ")

if "1" in answer: print "foo"
elif "2" in answer: print "bar"

Como está, este código exige que o usuário pressione Enter após digitar sua seleção. Mas há uma maneira melhor!

A Solução: Usando msvcrt

Se você estiver em uma plataforma Windows, a biblioteca msvcrt pode nos ajudar a alcançar a detecção de entrada em tempo real. A função chave aqui é getch(), que captura uma tecla pressionada imediatamente sem esperar por um pressionamento de Enter.

Guia Passo a Passo

  1. Importar a Biblioteca Comece importando a biblioteca msvcrt que nos permite interagir com a entrada de teclado do console.

    import msvcrt
    
  2. Capturar a Tecla Pressionada Utilize a função getch() para aguardar um pressionamento de tecla, permitindo que o programa atue no momento em que a tecla é pressionada.

    answer = msvcrt.getch()
    
  3. Implementar o Menu Agora, vamos colocar isso em contexto criando um menu simples que escuta pela tecla 1 ou 2 sem exigir Enter.

    import msvcrt
    
    print("Menu")
    print("1) Dizer Foo")
    print("2) Dizer Bar")
    
    while True:  # Loop indefinido para continuar verificando um pressionamento de tecla
        answer = msvcrt.getch()  # Aguardar pressionamento de tecla
    
        if answer == b'1':  # Se '1' for pressionado
            print("foo")
            break  # Sair do loop após responder
        elif answer == b'2':  # Se '2' for pressionado
            print("bar")
            break  # Sair do loop após responder
    

Como Funciona

  • O menu é exibido e o programa entra em um loop.
  • A função getch() pausa o programa até que o usuário pressione uma tecla.
  • Ao detectar a tecla, verifica se corresponde a 1 ou 2, executa a ação apropriada e, em seguida, sai do loop.

Conclusão

Ao seguir os passos descritos acima, você pode criar uma experiência de menu mais eficiente e amigável em suas aplicações Python. Com a biblioteca msvcrt permitindo a detecção imediata de pressionamento de teclas, os usuários podem interagir com o seu programa sem a exigência incômoda de pressionar Enter.

Agora, você pode aprimorar suas aplicações de console e proporcionar uma interação mais fluida aos usuários. Boa codificação!