Precedente Indice

Input da Mouse

Immagine slide
  • 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

Valid XHTML 1.0! Valid CSS!