Je veux avoir une boucle en cours d'exécution qui imprimera "Hello" et quand j'appuie "K", il arrête l'impression, mais cela ne termine pas le programme, puis lorsque j'appuie à nouveau "K", il commence à imprimer à nouveau.
J'ai essayé ceci (en utilisant le module clavier em>): p> mais quand j'appuie sur le bouton, il finit simplement que ce programme et ce n'est pas ce que je ' m en essayant de faire. Je comprends pourquoi ça se termine mais je ne sais pas comment le faire ne se termine pas. Comment puis-je faire ça? P> P>
5 Réponses :
import sys
import keyboard
from time import sleep
running = True
while running:
if keyboard.is_pressed("k"):
sleep(1)
elif keyboard.is_presed('Esc'):
sys.exit()
else:
print("hello")
I didnt test it, so please give me feedback
Il arrête d'impression pendant que je tiens "k", quand je laisse aller il attend 1 seconde et il commence à imprimer à nouveau. Ce que j'essaie de faire, c'est avoir le bouton "k" comme un commutateur.
Peut-être quelque chose comme ça:
Il arrête l'impression mais je ne peux pas l'obtenir pour reprendre.
@Mmencombination Je modifie la réponse, veuillez le revoir et donner des commentaires.
@Thernk pressing "k" ne fait rien. Peu importe, un autre utilisateur résolu. Merci encore.
import keyboard
running = True
display = True
block = False
while running:
if keyboard.is_pressed("k"):
if block == False:
display = not display
block = True
else:
block = False
if display:
print("hello")
else:
print("not")
Merci. Je viens de changer: else: impression ("pas") code> à: else: pass code> et cela fonctionne comme prévu. Merci encore.
hahah, je l'ai fait pour mon usage et oublie ça: D
Veuillez noter que si vous ajoutez d'impression ("stop / start") dans le programme d'Adrian Melon, vous pouvez voir que son programme imprime plusieurs fois "Hello" après 'k' est enfoncé jusqu'à ce que le tampon soit vide. Vous devez vider le tampon, Vous pouvez examiner ma réponse.
@Rouhollahghasempour Êtes-vous sûr? Si je comprends bien, vous verrez cela "plusieurs fois" Hello "" jusqu'à ce que vous arrête de pousser le bouton 'k', la méthode ne vérifie que si la touche est enfoncée au moment de son appel. Ne mettez-vous pas print ("stop / start") code> dans un mauvais endroit?
@adrianmelon Oui, j'ai couru mon programme et votre programme et vous pouvez les vérifier. J'ai mis l'impression ("Stop / Démarrage") dans la ligne qui est exécutée après que le "k" soit enfoncé. Le problème augmente comme clavier.is_primé ne vidose pas le tampon. Comme, les clés ont deux octets, nous devons lire deux octets par DOIT = MSVCRT.GETCH (). Décode (UTF-8 ').
Je ne comprends pas le problème. Pourriez-vous donner l'exemple de la sortie de la console, ce qui montre un problème avec la mémoire tampon?
@adrianmelon j'ai mis la sortie des deux codes. s'il te plaît vérifie le.
Vous pouvez utiliser un gestionnaire pour la clé KeyPress, qui définit un événement que le thread principal peut alors tester périodiquement et attendre si nécessaire.
(Notez qu'il existe deux types d'événements ici, l'événement KeyPress et le Réglage du en cours d'exécution code>, il ne faut donc pas être confus.) p>
Je pense que la bonne façon est de rincer le tampon, car les solutions précédentes peuvent imprimer davantage. Cela fonctionne pour Windows, pour Linux, vous devez vous référer à python lire un seul Caractère de l'utilisateur Ceci est la sortie de ce code:
Veuillez noter que si vous ajoutez une impression ("stop / start") dans le programme d'Adrian Melon, vous pouvez voir que son programme imprime plusieurs fois "Hello" après "K" enfoncé jusqu'à ce que le tampon soit vide. P> import keyboard
running = True
display = True
block = False
while running:
if keyboard.is_pressed("k"):
print("stop/start")
if block == False:
display = not display
block = True
else:
block = False
if display:
print("hello")
else:
pass
Je ne suis pas sûr du problème que vous voulez dire, mais nuage pas vous écrivez la ligne imprimer ("stop / démarrage") code> après mon affichage = pas afficher code> pour améliorer la comparabilité de la comparabilité de Nos codes? Dans votre code, cette ligne est après analogue impression = pas d'impression code>.
Imprimer ("Stop / Démarrage") est exécuté après que "K" soit enfoncée (une touche est enfoncée et cette touche est "K"). La variable "Block" est la vôtre qui n'est pas liée à "K" est pressée. Veuillez vous reporter à Stackoverflow. com / questions / 510357 / ... . Nous devrions arrêter cette discussion. Bonne chance.
Block CODE> est nécessaire pour utiliser le bouton K CODE> comme interrupteur à bascule, sans IT K CODE> BOGgle Condition d'impression Chaque passe de boucle. Dans mon code, appuyer sur k code> n'est pas suffisant de condition pour basculer Affichage code> variable, en face de votre solution. Votre Stop / Démarrez CODE> doit être après la changez de sens pour avoir un sens. Je pense que vous avez mal compris mon code, mais je conviens que c'est assez de discussion à ce sujet. Bonne journée!
Vous aurez besoin d'une seconde nichée pendant, une pour le programme général, et une pour l'impression
("Hello") code>.Quand vous voulez terminer complètement
Vous avez besoin de conditions différentes pour afficher et arrêter la boucle, regarder ma réponse