Vai al contenuto
Leo

09 Sezione 9 di 15

Grafici, suoni e animazioni

Un programma diventa molto più bello quando mostra i dati con un grafico, suona una melodia o fa muovere i suoi controlli. In Leo bastano poche righe, sempre in italiano.

  • 5 minuti di lettura
  • Livello: intermedio
  • 7 esempi verificati

Il primo grafico#

Un grafico si crea con una funzione, gli si danno i dati e poi lo si mostra in una finestra o lo si salva come immagine.

studio.leoeseguito con Leo
variabile g = grafico_barre({"Lun": 3, "Mar": 5, "Mer": 2, "Gio": 4, "Ven": 6}, "Ore di studio")g.titolo_y = "ore"g.mostra_valori = verog.salva("studio.svg")     # oppure "studio.png"

Con g.mostra() il grafico si apre in una finestra che si adatta alle dimensioni: S lo salva in PNG accanto al programma, Esc chiude.

FunzioneGrafico
grafico_barre(dati, titolo)barre verticali (più serie = barre affiancate)
grafico_linee(dati, titolo)linee con i punti
grafico_area(dati, titolo)linee con l'area colorata sotto
grafico_torta(dati, titolo), grafico_anello(dati, titolo)torta con le percentuali, anello con il totale al centro
grafico_dispersione(dati, titolo)punti sparsi da coppie [x, y]
istogramma(valori, classi, titolo)conta i valori per intervalli

I dati possono essere una lista di numeri, un dizionario {"Gen": 12, "Feb": 18} o una lista di coppie. Le proprietà più utili: titolo, titolo_x, titolo_y, tema ("scuro" o "chiaro"), colori, legenda, griglia, mostra_valori, larghezza e altezza.

Più serie e tema chiaro#

vendite.leoeseguito con Leo
variabile g = grafico("barre", titolo = "Vendite")g.aggiungi_serie("2025", {"Gen": 100, "Feb": 110, "Mar": 130})g.aggiungi_serie("2026", {"Gen": 120, "Feb": 150, "Mar": 90}, "oro")g.tema = "chiaro"g.salva("vendite.svg")

Un grafico dentro la finestra#

Metti una Tela sulla finestra (categoria Disegno) e disegnaci dentro il grafico: prende le dimensioni della tela.

Finestra1.leoprovato con Leo
quando Pulsante1.clic fai    variabile g = grafico_torta({"Rosso": 5, "Nero": 3, "Bianco": 2}, "Voti")    Tela1.pulisci()    g.disegna_su(Tela1)fine

Suoni e musica#

Le note si scrivono in italiano: do re mi fa sol la si, con # per il diesis e b per il bemolle (do#, sib). In una melodia ogni nota ha la durata attaccata, come nel solfeggio: do4 è un quarto, do2 una metà, do8 un ottavo; p4 è una pausa.

musica.leoeseguito con Leo
suona(nota("la"))                           # il la centrale, 440 Hzsuona(melodia("do4 re4 mi4 do4 mi2"), aspetta = vero)variabile fra_martino = melodia("do4 re4 mi4 do4 do4 re4 mi4 do4 mi4 fa4 sol2", tempo = 140)variabile finale = accordo("do maggiore", battiti = 4, forma = "triangolo").dissolvenza(uscita = 1.5)variabile brano = fra_martino.poi(silenzio(0.3)).poi(finale)salva_suono(brano, "brano.wav")stampa("Durata del brano:", arrotonda(brano.durata, 1), "secondi")
Uscita
Durata del brano: 7.4 secondi
  • suona non blocca: il programma va avanti mentre il suono si sente (con aspetta = vero aspetta la fine); ferma_suoni() smette subito;
  • accordo("la minore"), tono(1000, 0.2) (un bip), rumore(3, "marrone") (come il mare), silenzio(0.5);
  • le forme d'onda cambiano il timbro: "sinusoide" (dolce), "quadra" (videogiochi anni '80), "triangolo" (flauto), "dente_di_sega";
  • un suono si combina con poi, insieme, ripeti, con_volume, dissolvenza, al_contrario, e si salva in WAV. Per gli MP3 usa il controllo Suono in una finestra.

Animazioni dei controlli#

Nei programmi con le finestre i controlli si muovono, si ingrandiscono, sfumano e cambiano colore pian piano, senza fermare il programma. Tre modi equivalenti di scrivere la stessa animazione:

Finestra1.leoprovato con Leo
quando Pulsante1.clic fai    anima Pulsante1.alto a 50 in 0.3 secondi con curva "rimbalzo"    anima(Pulsante1, "alto", 50, 0.3, "rimbalzo")    Pulsante1.anima("alto", 50, 0.3, "rimbalzo")fine
Risultato (controlli simulati)
Pulsante1.alto = 50
CurvaCome si muove
"lineare"sempre alla stessa velocità
"morbida"parte piano, accelera e arriva piano (predefinita)
"veloce"parte veloce e frena all'arrivo
"lenta"parte piano e accelera
"rimbalzo"arriva e rimbalza, come una palla
"elastica"va un po' oltre e torna indietro, come una molla

Si animano le proprietà numeriche (sinistra, alto, larghezza, altezza, opacità, dimensione_carattere, il valore di una barra…) e i colori. Durante l'animazione, leggere la proprietà dà il valore di quel momento; alla fine, esattamente il valore d'arrivo.

Fare qualcosa alla fine: poi#

Finestra1.leoprovato con Leo
funzione ricadi()    anima PulsanteSalta.alto a 150 in 0.6 secondi con curva "rimbalzo"fine quando PulsanteSalta.clic fai    anima(PulsanteSalta, "alto", 90, 0.25, "veloce", poi = ricadi)fine
Risultato (controlli simulati)
PulsanteSalta.alto = 150

Effetti pronti#

EffettoChe cosa fa
lampeggia(c, volte = 3)il controllo sparisce e ricompare
scuoti(c)scuote a destra e a sinistra, come un «no»
pulsa(c)si ingrandisce un poco e torna com'era
dissolvi(c)sfuma fino a sparire (alla fine visibile è falso)
compari(c)lo rende visibile sfumando

Tutti esistono anche come metodi (Etichetta1.pulsa()) e accettano poi = funzione. aspetta_animazioni() aspetta che finiscano tutte; ferma_animazioni() le ferma dove sono.

La tartaruga che disegna#

Ogni programma ha una tartaruga con una penna: parte dal centro, guarda in alto e disegna mentre cammina. È il modo più immediato per vedere all'opera cicli, funzioni e trasformazioni geometriche. A fine programma il disegno compare in una finestra (o viene salvato in SVG).

stella.leoeseguito con Leo
sfondo("nero")spessore(3)colore("oro")riempi("#3A2A08")ripeti 5 volte    avanti(160)    destra(144)finefine_riempi()penna_su()vai_a(0, -120)penna_giu()colore("rosso")cerchio(40)nascondi_tartaruga()salva_disegno("stella_disegno.svg")
ComandoChe cosa fa
avanti(passi), indietro(passi)cammina (100 passi se non indicato)
destra(gradi), sinistra(gradi)gira (90 gradi se non indicato)
penna_su(), penna_giu()smette / ricomincia di disegnare
colore(c), spessore(n), sfondo(c)colore e spessore della penna, colore del foglio
riempi(c) … fine_riempi()colora l'interno della figura
cerchio(raggio), vai_a(x, y), casa()cerchi e spostamenti
velocità(n)da 1 (lenta) a 10 (veloce); 0 = subito
scrivi_qui(testo), salva_disegno(percorso)scrive un testo / salva in SVG