Come gestire gli eventi del mouse su Pygame

Per rilevare un'azione compiuta con il mouse su Pygame intercetto uno di questi eventi:

  • MOUSEBUTTONDOWN
    click su qualsiasi pulsante del mouse
  • MOUSEBUTTONUP
    rilascio del pulsante tasto
  • MOUSEMOTION
    movimento del mouse
  • MOUSEWHEEL
    movimento della ruota di scorrimento del mouse

Ad esempio, per rilevare la pressione di un pulsante del mouse

  1. for event in pygame.event.get():
  2. if event.type == pygame.MOUSEBUTTONDOWN:

Gli eventi MOUSEBUTTONDOWN e MOUSEBUTTONUP prendono in considerazione i click su qualsiasi pulsante del mouse (left, middle o right) o sulla rondella.

Quale pulstante è stato premuto?

Per capire quale pulsante è stato premuto, devo analizzare anche il valore del metodo button.

  1. for event in pygame.event.get():
  2. if event.type == pygame.MOUSEBUTTONDOWN:
  3. if event.button == 1:
  4. print("left mouse button")

Il metodo button restituisce un valore intero compreso tra 1 e 5.

1 - click sul pulsante di sinistra del mouse
2 - click sul pulsante centrale del mouse
3 - click sul pulsante destro del mouse
4 - scorrimento verso l'alto (scroll up)
5 - scorrimento verso il basso (scroll down)

In alternativa posso usare la funzione mouse.get_pressed() che restituisce una tupla di valori booleani per indicare quale pulsante è stato premuto (left, middle, right).

  1. for event in pygame.event.get():
  2. if event.type == pygame.MOUSEBUTTONDOWN:
  3. tupla=mouse.get_pressed():

La rondella del mouse scorre verso l'alto o il basso

Un problema simile accade quando uso l'evento MOUSEWHEEL che rileva lo scorrimento della rondella del mouse ma non il verso.

In questo caso posso risolvere il problema usando il metodo y

  1. for event in pygame.event.get():
  2. if event.type == pygame.MOUSEBUTTONDOWN:
  3. if event.y == 1:
  4. print(" scroll up ")
  5. elif event.y == -1:
  6. print(" scroll down ")

Lo scorrimento verso l'alto è il valore 1 mentre quello in basso è il valore -1.

Come vedere i metodi degli eventi

Gli eventi usano metodi diversi.

Ad esempio, il click sul mouse usa il metodo button mentre lo scorrimento della rondella non lo usa.

Per vedere quali sono i metodi di un evento, basta scrivere una print(event).

  1. for event in pygame.event.get():
  2. if event.type == pygame.MOUSEMOTION:
  3. print(event)

In questo modo, quando eseguo lo script posso vedere l'elenco completo dei metodi associati all'evento

<Event(1024-MouseMotion {'pos': (361, 0), 'rel': (0, -2), 'buttons': (0, 0, 0), 'window': None})>

L'evento MOUSEMOTION ha gli eventi pos, rel, buttons, window.

In sintesi i metodi degli eventi per gestire il mouse sono:

  • MOUSEMOTION
    pos, rel, buttons, window
  • MOUSEBUTTONDOWN:
    pos, button, window
  • MOUSEBUTTONUP:
    pos, button, window
  • MOUSEWHEEL
    flipped, y, x, which, window

E così via.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

PyGame