• Non ci sono risultati.

1. Introduzione

1.2 Introduzione alle tecnologie mobili di riferimento

1.2.2 La libreria Kivy di Python

Kivy25 è un moderno toolkit grafico per l'interfaccia utente sviluppato in Python. Permette di

sviluppare facilmente interfacce naturali per un'ampia gamma di dispositivi. Un’applicazione può essere scritta una volta sola e può funzionare su svariati device. Per una serie di sviluppatori è molto intuitivo approcciare a Kivy, per alcuni motivi principali:

• Kivy ha un elegante supporto integrato per i dispositivi multitouch.

• Kivy è l'unico modo utile per codificare in Python su dispositivi mobili (per adesso). • Kivy sostituisce le API di interfacce grafiche come HTML e CSS.

• Kivy consente di mantenere una singola applicazione per numerosi sistemi operativi.

Anche per chi non ha molta esperienza di programmazione, Kivy lo si può imparare in pochissimo tempo grazie alla semplicità di scrittura del codice Python, considerato spesso un ottimo compromesso tra prestazioni e semplicità di sviluppo.

Attualmente esistono due versioni attive di Python: Python 2 e Python 3. La sintassi e la librerie standard sono cambiati tra le due versioni ma entrambe sono molto popolari.

A partire dalla versione 1.8, Kivy supporta sia gli interpreti Python 2 che di Python 3, ma per lo sviluppo è consigliabile utilizzare Python 3, in quanto possiede una sintassi più semplice, ed ha una libreria standard più chiara.

Tuttavia, da una prospettiva di facile utilizzo, è più probabile che Python 2 sia già installato nei computer con sistemi operativi Linux e OS X. Inoltre, gli strumenti utilizzati per la distribuzione per Android e iOS funzionano solo su Python 2, e potrebbe non essere un problema se si volesse sviluppare un’applicazione mobile avente uno dei due sistemi operativi sopracitati.

Per avviare un progetto Kivy dopo aver installato la libreria, basta creare una directory dedita ad ospitare il progetto e aprire un nuovo file chiamato main.py con un qualsiasi editor di testo.

Il modulo Python di partenza per tutte le applicazioni di Kivy dovrebbe essere denominato main.py, in quanto gli strumenti di generazione utilizzati per automatizzare la distribuzione nei dispositivi mobili cercheranno quel file. Ora basta aggiungere le seguenti di righe di codice a questo nuovo file:

from kivy.app import App App().run()

Questo è il codice sul quale Kivy pone le fondamenta. Importa una classe App, la istanzia e chiama il metodo di esecuzione. Per eseguire questo codice, attivando l'ambiente Kivy, basta digitare su terminale il seguente comando:

python main.py

o, nel caso si stesse sviluppando sul sistema operativo Mac OS:

kivy main.py

dopo aver digitato i seguenti comandi, viene aperta una finestra vuota con uno sfondo nero, e quella corrisponderà alla nostra applicazione attualmente vuota. L'oggetto App di Kivy fa un'impressionante quantità di lavoro poichè si occupa di molteplici operazioni in background: interagire con l'hardware dello schermo; parlare con dispositivi di input quali display multitouch, tastiere e accelerometri, attività di pianificazione delle applicazioni come Promemoria, e molto altro ancora.

Un’altra caratteristica di Kivy è il KV language (talvolta chiamato kvlang o linguaggio kivy) il quale consente di creare in modo dichiarativo, come un linguaggio di markup, la struttura di widget e di associare le proprietà dei widget alle chiamate delle funzioni in modo naturale. Consente una prototipazione molto veloce e modifiche agili all'interfaccia utente. Facilita anche una buona separazione tra la logica dell'applicazione e la sua interfaccia utente.

Se si volesse creare, ad esempio, un tipo di contenuto che sia una riga di testo, non resta che creare un nuovo file, chiamato contents e salvarlo con l’estensione .kv:

#:kivy 1.8.0 <Label>:

text: “Hello World”

Successivamente, per leggere e interpretare questo file dedito alla lettura dei componenti dell’interfaccia, non resta che scrivere un programma di questo tipo:

from kivy.app import App #kivy.require("1.8.0")

from kivy.uix.label import Label

class contents(App): def build(self): return Label()

if __name__ == "__main__": contents().run()

Con semplicemente otto righe di codice in un file e tre in un altro, è stata creata un applicazione con una etichetta (Label) che può essere utilizzata sia su Desktop che su piattaforme mobili. Il programma per leggere almeno un componente dal file contents.kv, deve avere una classe che abbia lo stesso nome del file, ed un metodo che restituisca l’oggetto in questione. Importante inoltre l’uso delle parentesi angolate26 per i nodi padre all’interno del file kv. Senza di esse il programma

funzionerebbe, ma la scritta dalla seguente videata sparirebbe, poiché non interpretata:

Nonostante il potenziale osservato in Kivy, come è accaduto per Kotlin, non è stato possibile utilizzare questa libreria formidabile, poiché l’applicazione web originaria sarebbe stata completamente riscritta, abbandonando tutte le tecnologie web trattate nel precedente capitolo, e quindi utilizzando nuovi strumenti messi a disposizione dalla libreria di Python.

È stato scelto in un primo luogo, di non utilizzare il linguaggio di programmazione Kotlin per il suo problema di non essere un linguaggio OS agnostic, ovvero funzionante su tutti i sistemi operativi. Successivamente non è stato scelto Kivy che, pur funzionando su tutti i dispositivi mobili, non si è rivelato di facile utilizzo in previsione di un ipotetica riscrittura in codice Python del motore grafico

26 Caratteristica che rende il linguaggio k v simile ad XML e ed ancora più simile QML (Qt Meta Language o Qt

Modeling Language), un linguaggio di markup dedito proprio alla creazione di interfacce grafiche. 13. Illustrazione: Videata mostrante l’applicazione Hello World

del modello particellare composto da molteplici linguaggi sia di markup, sia di programmazione, tra cui JavaScript in primo luogo, HTML e CSS, non di minore importanza.