Utilisation des bouton du clavier sur python (reupload)

ilyas -  
Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   -
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. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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
    
    0
  2. ilyas
     
    merci, mais pouvez vouz m'expliqué ces lignes :

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


    normalement il devrait avoir un
    else
    0
    1. ilyas
       
      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
      0
  3. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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
    0
    1. ilyas
       
      ça ne marche pas car maintenant il n'y a plus de boucle et j'ai complètement changer le programme
      0
  4. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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' '):
    0
    1. ilyas
       
      ça ne marche pas
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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
    
    0
    1. ilyas
       
      je suis sur Windows

      oui il y a un espace

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


      mais ca ne marche pas
      0
  7. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 ?
    0
    1. ilyas
       
      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
      
      0
  8. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Oui mais avant, répond a ma question ...... ;-)
    0
    1. ilyas
       
      oui ca marche !
      0
  9. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 ?
    0
    1. ilyas
       
      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" ;-) ☺
      0
  10. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 ?
    0
    1. ilyas
       
      ils me mettent plein de espace pour arrêter et quand j'appuie sur espace ça continue
      0
  11. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 ...'



    0
    1. ilyas
       
      pareil ça marche pas

      j'ai la version 3.8.1 de python
      0
  12. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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:

    0
    1. ilyas
       
      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
      0
  13. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 ...
    0
    1. ilyas
       
      Bonsoir Phil, que faire maintenant ? vu que ce code ne marche pas
      0
  14. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    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 ...
    0