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.
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.
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.
| Funzione | Grafico |
|---|---|
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#
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.
quando Pulsante1.clic fai variabile g = grafico_torta({"Rosso": 5, "Nero": 3, "Bianco": 2}, "Voti") Tela1.pulisci() g.disegna_su(Tela1)fineSuoni 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.
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")Durata del brano: 7.4 secondi
suonanon blocca: il programma va avanti mentre il suono si sente (conaspetta = veroaspetta 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 controlloSuonoin 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:
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")finePulsante1.alto = 50
| Curva | Come 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#
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)finePulsanteSalta.alto = 150
Effetti pronti#
| Effetto | Che 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).
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")| Comando | Che 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 |