Problème avec attribut key suite à un pygame.event.get()

a marqué ce sujet comme résolu.

Bonjour,

Je suis débutant en python et pygame. Dans cette boucle:

attends = True
while attends:
    for touche in pygame.event.get():
    
        if touche.key == pygame.K_j:
           pygame.draw.rect(screen,blanc,tabledim,width = 2)
           pygame.display.flip()
        elif touche.type == pygame.KEYUP:
            pygame.draw.rect(screen,jaune,tabledim,width = 2)
            pygame.display.flip()
        elif touche.type == pygame.QUIT:
            attends = False

J’ai un message d’erreur lorsque je teste touche.key (if touche.key == pygame.K_j:)

AttributeError: 'pygame.event.Event' object has no attribute 'key'

C’est pourtant la syntaxe donnée dans les exemples du tuto pygame. Est-ce qu’il me manque quelque chose ? Merci pour votre aide.

Jojo


@Amaury — Mise en forme du code (modifie ton message pour voir comment on fait)

+0 -0

Salut, le test de la touche doit être consécutif à celui du type d’événement:

attends = True
while attends: 
    for touche in pygame.event.get():
        if touche.type == pygame.KEYUP: # ou KEYDOWN
            if touche.key == pygame.K_j:
               pygame.draw.rect(screen,blanc,tabledim,width = 2)
               pygame.display.flip()
            
        elif touche.type == pygame.QUIT:
            attends = False

La logique c’est qu’un évènement peut avoir plusieurs sources (plusieurs types d’évènements), par exemple un déplacement de souris, un redimensionnement de fenêtre ou encore un appui sur une touche du clavier.

Dans ton exemple initial tu pensais que pygame.event.get() ne renvoyait que des touches mais il peut renvoyer tout cet éventail d’évènements. Et parmi ces évènements, seuls ceux qui concernent le clavier peuvent avoir un attribut key qui précise la touche (ça n’a pas de sens de demander la touche d’un événement souris par exemple).

Ainsi, tu ne peux accéder à cet attribut key que si tu t’es d’abord assuré d’être sur un événement clavier.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte