HOWTO · Python
Como detectar o pressionamento de teclas em Python
Aprenda a detectar a entrada do teclado em Python com keyboard, pynput e readchar, incluindo eventos de pressionar e soltar e a entrada de uma única tecla no terminal.
Nesta página
Para detectar a entrada do teclado em Python, escolha uma biblioteca com base na origem da entrada: keyboard oferece hooks em nível de sistema, pynput fornece callbacks de pressionar e soltar, e readchar lê uma tecla em um programa de linha de comando sem esperar pelo Enter. Instale o pacote que você escolher e, em seguida, adapte o callback ou o loop de leitura dele à sua tarefa. Os exemplos específicos de cada pacote abaixo dependem de bibliotecas de terceiros e do acesso a um teclado ou a um terminal interativo, por isso são mostrados como orientação da API e não têm saída capturada.
Detectar o pressionamento de teclas usando o módulo keyboard em Python
O pacote keyboard pode instalar um hook que recebe eventos do teclado. Instale-o no mesmo ambiente Python que executa o seu programa com python -m pip install keyboard. Em alguns sistemas operacionais, os hooks globais de teclado podem exigir privilégios elevados ou ser restringidos pelo ambiente de desktop. Um hook recebe eventos de pressionar e de soltar a tecla; filtre por event.event_type == "down" quando a tarefa for relatar os pressionamentos. Uma integração típica registra um callback com keyboard.hook(on_key_event) e continua escutando com keyboard.wait("esc"). Remova um hook com keyboard.unhook_all() quando a escuta terminar, mas o processo continuar fazendo outro trabalho. Mantenha os callbacks curtos para que o tratamento de eventos não atrase o restante do programa.
Este exemplo autônomo usa registros de eventos de exemplo para mostrar a lógica de filtragem usada por um callback de hook. Ele não lê eventos físicos do teclado; use a integração do pacote acima para isso.
events = [
{"name": "a", "event_type": "down"},
{"name": "a", "event_type": "up"},
]
for event in events:
if event["event_type"] == "down":
print(f"Key {event['name']} pressed")
Key a pressed
Detectar o pressionamento de teclas usando o módulo pynput em Python
Use pynput quando o programa precisar de manipuladores separados para pressionar e soltar teclas. Instale-o com python -m pip install pynput. Um listener é criado com keyboard.Listener(on_press=on_press, on_release=on_release) e iniciado com o seu gerenciador de contexto ou com start(). No callback de pressionar, as teclas de caracteres expõem um valor char, enquanto teclas especiais como Escape podem não expor; verifique se o atributo existe e não é None antes de lê-lo. O callback de soltar pode comparar a tecla com keyboard.Key.esc e retornar False para parar o listener. Chame join() quando a thread principal dever esperar o listener terminar. Este fluxo de callbacks específico do pacote não é executado aqui porque pynput não está disponível no runtime fornecido; as permissões do sistema operacional e as restrições da sessão de desktop também podem afetar o acesso à entrada do sistema.
Detectar o pressionamento de teclas usando o módulo readchar em Python
Para um prompt de linha de comando que precisa de uma tecla por vez, readchar lê uma tecla sem exigir que o usuário pressione Enter. Instale-o com python -m pip install readchar. Em um loop, chame readchar.readkey() para esperar de forma síncrona pela entrada do terminal e, em seguida, compare a tecla retornada com "q" para encerrar o loop. Imprima as outras teclas retornadas à medida que elas chegarem. Isso é adequado para a interação com o terminal, não para um hook global que observa as teclas enquanto outro aplicativo está em foco. As teclas de seta e outras teclas especiais podem ser representadas por sequências de vários caracteres, portanto, compare-as com os valores documentados para o terminal e a biblioteca ao manipulá-las. Esta interação específica do pacote não é executada aqui porque readchar não está disponível no runtime fornecido.
Conclusão
Escolha keyboard para um hook que reage aos eventos do teclado do sistema, pynput quando os callbacks de pressionar e soltar ou o controle explícito do ciclo de vida do listener se adequarem ao programa, e readchar para um prompt de linha de comando simples de uma única tecla. Os dois primeiros escutam eventos além de um prompt e podem depender das permissões do sistema operacional. readchar lê do terminal ativo e não fornece monitoramento global. Instale o pacote selecionado no ambiente que executa o seu script e escolha uma condição de parada clara, como Escape ou q, para que o listener ou o loop de leitura possa terminar de forma previsível.