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
-
Importar a Biblioteca Comece importando a biblioteca
msvcrt
que nos permite interagir com a entrada de teclado do console.import msvcrt
-
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()
-
Implementar o Menu Agora, vamos colocar isso em contexto criando um menu simples que escuta pela tecla
1
ou2
sem exigirEnter
.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
ou2
, 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!