0
votes

Comment faire une pause et reprendre une boucle de temps en python?

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 ): xxx

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?


3 commentaires

Vous aurez besoin d'une seconde nichée pendant, une pour le programme général, et une pour l'impression ("Hello") .


Quand vous voulez terminer complètement


Vous avez besoin de conditions différentes pour afficher et arrêter la boucle, regarder ma réponse


5 Réponses :


0
votes
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

1 commentaires

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.



1
votes

Peut-être quelque chose comme ça: xxx


3 commentaires

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.



1
votes
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")

7 commentaires

Merci. Je viens de changer: else: impression ("pas") à: else: pass 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") 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.



0
votes

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 , il ne faut donc pas être confus.) xxx


0 commentaires

0
votes

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 xxx pré>

Ceci est la sortie de ce code: Entrez la description de l'image ici 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


3 commentaires

Je ne suis pas sûr du problème que vous voulez dire, mais nuage pas vous écrivez la ligne imprimer ("stop / démarrage") après mon affichage = pas afficher pour améliorer la comparabilité de la comparabilité de Nos codes? Dans votre code, cette ligne est après analogue impression = pas d'impression .


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 est nécessaire pour utiliser le bouton K comme interrupteur à bascule, sans IT K BOGgle Condition d'impression Chaque passe de boucle. Dans mon code, appuyer sur k n'est pas suffisant de condition pour basculer Affichage variable, en face de votre solution. Votre Stop / Démarrez 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!