Python 2 - Grafica - 16

# Input da tastiera

- Anche per la gestione della tastiera dobbiamo predisporre delle funzioni di gestione dell'evento (handler)
- In particolare, per la tastiera ne abbiamo due, uno per la pressione di un tasto l'altro per il rilascio.
- Per installare il gestore della pressione, useremo il metodo set_keydown_handler(<gestore>) di frame:
  finestra.set_keydown_handler(premuto)
- Mentre per installare il gestore di rilascio useremo il metodo set_keyup_handler(<gestore>) di frame:
  finestra.set_keyup_handler(rilasciato)
- In entrambi i gestori abbiamo un parametro che riporta il codice del tasto:

      def rilasciato(key):
          global movimento
          if key == simplegui.KEY_MAP['up'] or key == simplegui.KEY_MAP['down']:
              movimento = 0

- Per conoscere i codici dei tasti si utilizza la lista KEY_MAP[<nome>] di simplegui. Per conoscerne i nomi si veda http://www.codeskulptor.org/docs.html#Keys
- Un esempio completo è:

      import simplegui
      import random
      larghezza = 300
      altezza = 200
      racc_sopra = 70
      racc_sotto = 130
      movimento = 0
      def disegno (pannello):
          global movimento, racc_sopra, racc_sotto
          if movimento > 0:
              if racc_sotto < altezza:
                  racc_sopra +=1
                  racc_sotto += 1
              else:
                  movimento = 0
          elif movimento < 0:
              if racc_sopra > 0:
                  racc_sopra -= 1
                  racc_sotto -= 1
              else:
                  movimento = 0
          pannello.draw_line((300, racc_sopra), (300, racc_sotto), 5, "Red")
      def premuto(key):
          global movimento
          if key == simplegui.KEY_MAP['up']:
              movimento = -1
          elif key == simplegui.KEY_MAP['down']:
              movimento = 1
      def rilasciato(key):
          global movimento
          if key == simplegui.KEY_MAP['up'] or key == simplegui.KEY_MAP['down']:
              movimento = 0
      finestra = simplegui.create_frame("Prova", larghezza, altezza)
      finestra.set_canvas_background('#000080')
      finestra.set_draw_handler(disegno)
      finestra.set_keydown_handler(premuto)
      finestra.set_keyup_handler(rilasciato)
      finestra.start()

- ESERCIZIO: combinare il movimento della racchetta nell'esercizio di prima, aggiungendo anche un conteggio dei rimbalzi sulla racchetta e delle palle perse

© Ing. Stefano Salvi - released under FDL licence