Utilisation des bouton du clavier sur python (reupload)

Fermé
ilyas - 21 avril 2020 à 18:53
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 26 avril 2020 à 08:53
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)
A voir également:

13 réponses

Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 22 avril 2020 à 11:46
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
merci, mais pouvez vouz m'expliqué ces lignes :

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


normalement il devrait avoir un
else
0
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
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
22 avril 2020 à 12:00
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
ça ne marche pas car maintenant il n'y a plus de boucle et j'ai complètement changer le programme
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
22 avril 2020 à 14:50
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
ça ne marche pas
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
22 avril 2020 à 16:12
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
je suis sur Windows

oui il y a un espace

aucune erreur ▲▼☺
0
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
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
22 avril 2020 à 16:42
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
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
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
22 avril 2020 à 16:46
Oui mais avant, répond a ma question ...... ;-)
0
oui ca marche !
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
22 avril 2020 à 17:00
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
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
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
22 avril 2020 à 18:28
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
ils me mettent plein de espace pour arrêter et quand j'appuie sur espace ça continue
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
24 avril 2020 à 20:03
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
pareil ça marche pas

j'ai la version 3.8.1 de python
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
Modifié le 25 avril 2020 à 12:11
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
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
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
25 avril 2020 à 18:49
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
Bonsoir Phil, que faire maintenant ? vu que ce code ne marche pas
0
Phil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 168
26 avril 2020 à 08:53
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