Python Windows `msvcrt.getch()` ne détecte tous les 3 pression de touche?
Mon code est ci-dessous:
import msvcrt
while True:
if msvcrt.getch() == 'q':
print "Q was pressed"
elif msvcrt.getch() == 'x':
sys.exit()
else:
print "Key Pressed:" + str(msvcrt.getch()
Ce code est basé sur cette question; je l'utilise pour prendre connaissance de moi-même avec getch
.
J'ai remarqué qu'il faut 3 en appuyant sur la touche 3 fois pour afficher le texte une fois. Pourquoi est-ce? Je suis en train de l'utiliser comme une boucle d'événements, et c'est trop de lag...
Même si j'type 3 différents touches, il ne renvoie la 3ème touche.
Comment puis-je le forcer à aller plus vite? Est-il une meilleure façon de réaliser ce que je suis en train de réaliser?
Merci!
evamvid
OriginalL'auteur evamvid | 2014-03-12
Vous devez vous connecter pour publier un commentaire.
vous appelez la fonction 3 fois dans la boucle. essayez de l'appeler qu'une seule fois comme ceci:
sans doute avait son javascript chapeau, mais il a eu la bonne idée. il suffit de retirer le
var
Je vois la réponse est déjà fixé 🙂 tnx! Oui js glissé dans...je ne pourrais pas vivre le tester car je n'ai pas de windows ici et msvcrt est spécifique win32 😉
OriginalL'auteur wizard23
Vous pouvez optimiser les choses un peu en utilisant le
msvcrt.kbhit
fonction qui va vous permettre de vous appelermsvcrt.getch()
qu'autant qu'il est nécessaire de:Noter que le
Key Pressed
valeur imprimée à ne pas faire sens pour des choses comme des touches de fonction. C'est parce que c'ces cas, c'est vraiment le Windows scan code pour la clé, n'est pas régulier le code de clé pour le personnage.mscvrt.getch()
lorsqu'il détecte une pression de touche?Je ne connais pas les détails, c'est une partie de la MS C/C++ Runtime library. Il ne demande pas
mscvrt.getch()
autant que je sache, il vous dit si il y a une clé disponible. Coups de clés sont mises en mémoire tampon par le système d'exploitation et le clavier matériel.Notez qu'en utilisant l'analyse de la table de code vous pouvez détecter la fonction et les touches fléchées en plus de l'ordinaire.
Je n'appellerais pas cela une optimisation. En fait, il utilise beaucoup de CPU en plus quand vous avez
if msvcrt.kbhit():
dans le code. Essayez de supprimer leif msvcrt.kbhit():
et vous verrez beaucoup plus faible utilisation du PROCESSEUR (getch()
est le blocage et ainsi le code sans leif msvcrt.kbhit():
vous proposer utilise beaucoup moins de CPU).OriginalL'auteur martineau