Utilisation des bouton du clavier sur python (reupload)

Bonjour,j'ai 10 ans et je fais du python
je voudrais savoir comment faire pour que quand je clique sur la touche espace ,le programme se ferme

voici mon code pour vous-aidez :

from turtle import *

speed(0)
shape('circle')
bgcolor('white')
color('orange')
while True :
  circle(50)
  left(10)

13 réponses

  1. Bonjour Ilyas,

    Moi, j'ajouterais un test dans la boucle pour détecter un appui de touche du clavier, pour cela, il faut importer la bibliothèque msvcrt

    Juste après la ligne from turtle import * , j'ajouterais:
    import msvcrt

    et dans la boucle while, juste après left(10):

    while True :
      circle(50)
      left(10)
      if(msvcrt.kbhit()):
        if(msvcrt.getch() == b' '): break
    
    1. merci, mais pouvez vouz m'expliqué ces lignes :

        if(msvcrt.kbhit()):
        if(msvcrt.getch() == b' '): break


      normalement il devrait avoir un
      else
      1. en fait j'ai améliorer mon programme et il n'y a plus de boucle donc comment faire

        voici le code (j'ai ajouter le modules que vous m'avez dis d'installer et les autres ligne qui convienne avec le module msvrt:
        from turtle import *
        import msvcrt
        
        speed(0)
        shape('circle')
        bgcolor('white')
        
        color('red')
        for count in range(40):
          circle(100)
          left(10)
        
        color('#FFBD00')
        for count in range(40):
          right(10)
          circle(100)
        
        color('yellow')
        for count in range(40):
          circle(100)
          left(10)
        
        color('green')
        for count in range(40):
          right(10)
          circle(100)
        
        color('lightblue')
        for count in range(40):
          circle(100)
          left(10)
        
        color('blue')
        for count in range(40):
          right(10)
          circle(100)
        
        color('violet')
        for count in range(40):
          circle(100)
          left(10)
        
        color('black')
        for count in range(40):
          right(10)
          circle(100)
          if(msvcrt.kbhit()):
            if(msvcrt.getch() == b'space'):
              break
    2. non, pas de else

      de plus je vois dans ta réponse que les 2 lignes sont alignées, normalement la 2eme est décalée de 2 espaces:

        if(msvcrt.kbhit()):
          if(msvcrt.getch() == b' '): break
      


      explication:
      if(msvcrt.kbhit()): si on appui sur une touche du clavier pendant la boucle
      if(msvcrt.getch() == b' '): break
      et si la touche est un espace, alors break : on sort de la boucle while


      On aurait même pu écrire:

        if(msvcrt.kbhit() and msvcrt.getch() == b' '): break
      


      Essaie pour voir si ca marche
      1. ça ne marche pas car maintenant il n'y a plus de boucle et j'ai complètement changer le programme
    3. ah évidemment si tu as changé entre-temps ...

      mais maintenant, à quoi sert d'appuyer sur espace ?

      au lieu d'une boucle while infinie, tu as une boucle for qui s'arrête au bout de 40 tours

      Mais bon si tu veux arrêter avant, tu peux laisser ça, mais je n'ai pas écrit

      if(msvcrt.getch() == b'space'):

      j'ai écrit

      if(msvcrt.getch() == b' '):
      1. ça ne marche pas
    4. oui, remarque, 40 tours de boucle avec 2 instructions dedans, ca va très vite sur nos ordinateurs modernes !

      a mon avis, on a à peine le temps d'appuyer sur 'espace'

      Ca ne marche pas : tu as un message d'erreur, ou bien ca va jusqu'à la fin sans problèmes ?

      Tu es sur Windows ?

      Tu as bien mis un espace blanc entre les 2 signes ' ' qui suivent le b dans la ligne

      if(msvcrt.getch() == b' '): ????

      3 questions précises qui attendent 3 réponses précises ….. :-)

      Mais sinon, moi, j'essaierai ça, déjà pour voir :

      while True :
        circle(50)
        left(10)
        if(msvcrt.kbhit() and msvcrt.getch() == b' '): break
      
      1. je suis sur Windows

        oui il y a un espace

        aucune erreur ▲▼☺
      2. j'ai essayé avec ca :
        while True :
          circle(50)
          left(10)
          if(msvcrt.kbhit() and msvcrt.getch() == b' '): break


        mais ca ne marche pas
    5. ca marche pas …

      et sans la ligne que je t'ai fait ajouter est ce que ca marche ?

      C'est a dire que ca dessine un cercle de rayon 50 , puis pivote vers la gauche de 10 degrés,

      et ainsi de suite ?
      1. testez mon code pour voir :

        from turtle import *
        import msvcrt
        
        speed(0)
        shape('circle')
        bgcolor('white')
        
        color('red')
        for count in range(40):
          circle(100)
          left(10)
        
        color('#FFBD00')
        for count in range(40):
          right(10)
          circle(100)
        
        color('yellow')
        for count in range(40):
          circle(100)
          left(10)
        
        color('green')
        for count in range(40):
          right(10)
          circle(100)
        
        color('lightblue')
        for count in range(40):
          circle(100)
          left(10)
        
        color('blue')
        for count in range(40):
          right(10)
          circle(100)
        
        color('violet')
        for count in range(40):
          circle(100)
          left(10)
        
        color('black')
        for count in range(40):
          right(10)
          circle(100)
          if(msvcrt.kbhit() and msvcrt.getch() == b' '): break
        
    6. ok, alors test no 2:

      On s'abstrait de Turtle pour découper le problème : ce programme s'affiche sur une fenêtre "invite de commandes"

      import msvcrt
      
      while True:
        print('espace pour arreter')
        if(msvcrt.kbhit() and msvcrt.getch() == b' '): break
      
      input ('\nPresser Entrée ...')
      


      Chez moi ca donne ça et le défilement s'arrête bien quand on appuie sur la touche 'espace' du clavier :


      Déjà, est-ce que ça, ca marche ?
      1. ce code ne fonctionne pas ↓↓↓↓↓↓↓↓↓↓
        while True:
          print('espace pour arreter')
          if(msvcrt.kbhit() and msvcrt.getch() == b' '): break
        
        input ('\nPresser Entrée ...')


        rectification : "terminal" et pas "invite de commandes" ;-) ☺
    7. c'est bizarre, chez moi, ca pète le feu à la béquille !
      la preuve: la copie d'écran que je t'ai affichée dans ma précédente réponse
      et c'est un code tout simple

      Ca ne marche pas, ok, mais ca fait quoi exactement ?
      Evidemment, tu as mis import msvcrt au début ?
      1. ils me mettent plein de espace pour arrêter et quand j'appuie sur espace ça continue
    8. Bizarre, bizarre

      Je suis sur Windows 10 et Python 3.7.2

      Voila mon programme complet, il n'y a rien de plus:

      # -*- coding:Latin-1 -*-
      
      import msvcrt
      
      input('\ntest arret défilement : appuyer sur entrée, et sur espace pour arreter')
      while True:
      	print('espace pour arreter')
      	if(msvcrt.kbhit() and msvcrt.getch() == b' '): break
      
      input ("\nVous venez d'appuyer sur la barre d'espace, presser Entrée ...")
      


      On affiche un 1er message: test arrêt défilement: ………...……..
      Ensuite boucle infinie qui affiche 'espace pour arreter'
      Donc, ça défile
      Et quand on appuie sur la barre d'espace, ça s'arrête et on a le message:
      'Vous venez d'appuyer sur la barre d'espace, presser Entrée ...'



      1. pareil ça marche pas

        j'ai la version 3.8.1 de python
    9. Bonjour Ilyas,

      C'est bizarre !!!

      Nous sommes sous Windows, moi, j'ai Python 3.7.2, toi 3.8

      Tu as normalement fait un strict copier/coller du dernier code que j'ai envoyé, sans rien y changer, et en respectant bien les indentations (on est d'accord que le test if( est bien dans la boucle while, et pas en dehors, c'est à dire que le test est aligné avec le print qui est juste au dessus ?)

      Tu lances le programme, tu appuie sur entrée comme l'indique le message pour démarrer le défilement
      Ca défile
      Tu appuie sur la barre d'espace en bas du clavier
      Chez moi, ca arrête le défilement et ça affiche "vous venez d'appuyer …..
      (La preuve : voir les photos ci-dessus)

      Chez toi, ca ne fait rien: le défilement continue

      Chez moi, ca marche
      Chez toi, ca ne marche pas ... on ne voit pas pourquoi .....

      Tu vas me dire: la seule différence est dans nos versions de Python, mais j'ai consulté la doc Python 3.8 et ces 2 méthodes sont toujours présentes:

      1. mais j'ai des problèmes avec mon python ,par exemple : quand je fais un code avec le module
        turtle
        ,ils me disent que
        speed()


        n'est pas une variable même si il n'y a pas cette commande

        surement un autre bug/glitche
    10. Ah !

      En tout cas, ce qui est sur c'est que si tu voulait mettre ça dans ta boucle

      for count in range(40):

      Tu ne verrais rien: 40 tour de boucle c'est trop rapide, tu sort de la boucle avant d'avoir eu le

      temps d'appuyer sur espace ...
      1. Bonsoir Phil, que faire maintenant ? vu que ce code ne marche pas
    11. Hello Ilyas,

      Alors, là, je suis sec

      Si tu as vraiment fait tout ce que je décris en détails dans mon message d'hier à 12h10,

      je ne vois pas, et évidemment, n'ayant pas ton ordi sous les yeux, je ne peux pas analyser ce qui

      s'y passe ...