Je crée un programme de type chronomètre en python et j'aimerais savoir comment détecter si une touche est enfoncée (comme p pour pause et s pour stop), et je n'aimerais pas que ce soit quelque chose comme raw_input qui attend le entrée de l'utilisateur avant de poursuivre l'exécution. Quelqu'un sait comment faire cela dans une boucle while?
Aussi, j'aimerais créer cette multiplateforme, mais si ce n'est pas possible, ma principale cible de développement est linux
python
python-2.7
keypress
detect
lobuo
la source
la source
Réponses:
Python a un module clavier avec de nombreuses fonctionnalités. Installez-le, peut-être avec cette commande:
Ensuite, utilisez-le dans du code comme:
la source
keyboard
nécessite apparemment la racine sous linux: /Pour ceux qui sont sous windows et qui ont du mal à trouver une réponse fonctionnelle, voici la mienne: pynput
La fonction ci-dessus imprime la touche sur laquelle vous appuyez et lance une action lorsque vous relâchez la touche «esc». La documentation du clavier est ici pour une utilisation plus variée.
Markus von Broady a mis en évidence un problème potentiel qui est: Cette réponse ne nécessite pas que vous soyez dans la fenêtre actuelle pour que ce script soit activé, une solution aux fenêtres serait:
la source
Comme OP le mentionne à propos de raw_input - cela signifie qu'il veut une solution cli. Linux: les malédictions sont ce que vous voulez (windows PDCurses). Curses, est une API graphique pour le logiciel cli, vous pouvez réaliser plus que simplement détecter les événements clés.
Ce code détectera les touches jusqu'à ce qu'une nouvelle ligne soit pressée.
la source
termios
et ainsi de suite ...import os
afin de pouvoir quitter quitter l'exemple.win.nodelay(False)
placeTrue
, cela ne générera pas un million d'exceptions par seconde.Il y a plus de choses qui peuvent être faites avec
keyboard
module.Voici quelques méthodes:
Méthode n ° 1:
Utilisation de la fonction
read_key()
:Cela va casser la boucle lorsque la touche pest enfoncée.
Méthode n ° 2:
Utilisation de la fonction
wait
:Il attendra que vous appuyiez sur pet continuera le code pendant qu'il est enfoncé.
Méthode n ° 3:
Utilisation de la fonction
on_press_key
:Il a besoin d'une fonction de rappel. J'ai utilisé
_
parce que la fonction clavier renvoie l'événement clavier à cette fonction.Une fois exécuté, il exécutera la fonction lorsque la touche sera enfoncée. Vous pouvez arrêter tous les hooks en exécutant cette ligne:
Méthode n ° 4:
Cette méthode est en quelque sorte déjà répondue par user8167727 mais je ne suis pas d'accord avec le code qu'ils ont créé. Il utilisera la fonction
is_pressed
mais d'une autre manière:Cela cassera la boucle lorsque vous pappuyez sur.
Remarques:
keyboard
lira les pressions sur les touches de l'ensemble du système d'exploitation.keyboard
nécessite root sur linuxla source
keyboard.wait()
pour attendre plus d'une touche et continuer si l'une d'elles est enfoncéewait()
ne donne pas cette fonctionnalité. Vous devrez utiliserkeyboard.read_key()
avec une condition if emballée dans une boucle while. Voir la méthode n ° 1suppress
utilisation des mots - clés danskeyboard.read_key()
, quand l'utiliser et quand pas ....Pour Windows, vous pouvez utiliser
msvcrt
comme ceci:la source
Utilisez ce code pour trouver la touche enfoncée
la source
Utilisez PyGame pour avoir une fenêtre et ensuite vous pouvez obtenir les événements clés.
Pour la lettre
p
:la source
J'ai donc créé ce .. genre de jeu .. basé sur ce post (en utilisant la bibliothèque msvcr et Python 3.7).
Voici la "fonction principale" du jeu, qui consiste à détecter les touches enfoncées:
Si vous voulez le code source complet du porgram, vous pouvez le voir ou le télécharger à partir d'ici:
Le jeu de clé secrète (GitHub)
(note: la touche secrète est: Ctrl+ F12)
J'espère que vous pourrez servir d'exemple et d'aider ceux qui viennent consulter ces informations.
la source
Je vous suggère d'utiliser PyGame et d'ajouter un handle d'événement.
http://www.pygame.org/docs/ref/event.html
la source
Ceci provient du package openCV. Il détecte une pression sur une touche sans attendre.
la source