Python 2 - Grafica - 19

# Input da Mouse

- Anche per il mouse abbiamo due gestori di evento da scrivere.
- Il primo, che viene chiamato quando il bottone del mouse viene premuto ed ogni volta che si sposta, mentre è premuto, si installa con il metodo set_mousedrag_handler(<gestore>) di frame:
  finestra.set_mousedrag_handler(trascinamento)
- Il secondo viene richiamato quando il bottone del mouse viene rilasciato e si installa con il metodo set_mouseclick_handler(<gestore>) di frame:
  finestra.set_mouseclick_handler(pressione)
- Entrambi i metodi hanno come parametro una tupla con le coordinate del mouse:

      def pressione(posizione):
          global centro, lavorando
          if not lavorando:
              centro = posizione
          else:
              lavorando = False

- L'esempio che faremo, crea un cerchio centrato nella posizione dove si preme il bottone del mouse e con il bordo dove lo si rilascia
- Per questo ci servirà la funzione sqrt(numero>) di math per calcoare il raggio:
  raggio = math.sqrt((centro[0]-posizione[0])**2 + (centro[1]-posizione[1])**2)
- L'esempio completo è:

      import simplegui
      import math
      larghezza = 300
      altezza = 200
      lavorando = False
      centro=None
      raggio=0
      movimento = 0
      def disegno (pannello):
          if centro != None and raggio != 0:
              pannello.draw_circle(centro, raggio, 1, "Red", "Red")
      def pressione(posizione):
          global centro, lavorando
          if not lavorando:
              centro = posizione
          else:
              lavorando = False
      def trascinamento(posizione):
          global raggio, centro, lavorando
          if not lavorando:
              centro = (posizione[0], posizione[1])
              lavorando = True
          raggio = math.sqrt((centro[0]-posizione[0])**2 + (centro[1]-posizione[1])**2)
      finestra = simplegui.create_frame("Prova", larghezza, altezza)
      finestra.set_canvas_background('#000080')
      finestra.set_draw_handler(disegno)
      finestra.set_mouseclick_handler(pressione)
      finestra.set_mousedrag_handler(trascinamento)
      finestra.start()

- ESERCIZIO: fare in modo che vengano memorizzati i cerchi fatti e nel pannello compaiano tutti
- PER I PIÙ BRAVI: aggiungere all'esercizio precedente anche l'opzione di cancellare un cerchio fatto cliccandoci sopra
- PER I SUPERLATIVI: Aggiungere un bottone che cancella tutti i cerchi memorizzati

© Ing. Stefano Salvi - released under FDL licence