SlideShare a Scribd company logo
1 of 19
Kivy Python Framework
for NUI Development
Gioele Gaggio
Software Developer @ Giuneco
Cosa Vedremo
• Architettura
• Componenti
• Kv Language
• Progetto di Esempio
• Analisi finale
• Framework Python Open Source per lo sviluppo rapido di
applicazioni basate su interfaccia grafica.
• Cross Platoform (Linux, Windows, macOS, Android, iOS e Raspberry
Pi).
• Integrazione nativa di input e protocolli per gli ambienti di
destinazione più comuni (WM_Touch, WM_Pen, Mac OS X Trackpad e
Magic Mouse, Mtdev, Linux Kernel HID, TUIO).
• Engine grafico basato su OpenGL ES2, scritto in C utilizzando Cython,
ed sostenuto da SDL2.
• Gratuito ed utilizzabile per scopi commerciali.
Kivy
Python
• Linguaggio di programmazione ad alto
livello.
• Object-oriented, aspect-oriented,
functional.
• Type sistem dinamico.
• Facile da imparare.
• Librerie e pacchetti a non finire.
Ha avuto già qualche utilizzo
nell’ambito mobile…
• PyS60 per Symbian
• Python CE per Windows
Mobile
• WinRT per Windows 8
• Py4A
• SL4A
Architettura
Kivy consiste in un insieme di blocchi funzionali che permettono
modularità e astrazione dal basso all’alto livello.
Core Providers e Input Providers garantiscono l’utilizzo delle API
specifiche in base al sistema di esecuzione
L’API di gestione grafica è un’astrazione di OpenGL. Permette la
creazione di oggetti grafici senza dover scrivere OpenGL code.
Le funzionalità Core permettono l’utilizzo delle feature più comuni:
• Clock per schedulare timer events;
• Cache
• Gesture detection (è possibile addestrarlo per riconoscere le
proprie gesture personalizzate)
• Kivy Language
• Properties
Architettura
Il modulo UIX contiene:
• Widgets: elementi UI che permettono di aggiungere
funzionalità alla propria applicazione.
• Layouts: contenitori di widgets per impostare posizione e
grandezza dei vari elementi.
Moduli Esterni che permettono di aggiungere funzionalità out of
the box ad una propria applicazione.
Eventi gestiti direttamente da input utente (come tap o click) o generate e
distribuiti a widget nestati o alla parte logica.
Architettura
Kv Language
• Permette di creare il proprio «widget tree» dichiarando le
«rules» separando la parte logica da quella di interfaccia
grafica
• Le rules utilizzano le stesse regole di indentazione di Python.
• Viene definito un widget root, oppure una classe, atto a
contenere le regole del file.
• Permette di definire i proprio Widget estendendo quelli già
esistenti.
E’ in grado di comprendere il contesto applicativo e quello
locale tramite l’utilizzo di tre parole chiave:
• app: fa riferimento all’istanza della propria applicazione.
• root: fa riferimento al widget/template che definisce il file
Kv.
• self: fa sempre riferimento al widget corrente.
Kv Language
Riduce o annulla la scrittura di codice Python lato logico per
definire gli oggetti grafici.
Python Kv
Eventi
• Scheduling di eventi senza dover interrompere l’esecuzione del
main loop dell’applicazione
• Scheduling di eventi su determinate condizioni o comandi
• Scheduling di eventi basati su widget:
• Property event: cambio di posizione, dimensioni…
• Widget-defined event: evento generato al click, tap,
inserimento di testo…
Eventi
Properties
• Creazione diretta di un evento associato ad uno specifico
attributo.
• Al cambiamento del valore, sia da interfaccia grafica che dalla
parte logica, viene lanciato un evento
• Sono strettamente legate al tipo di dato al quale devono
essere in ascolto. Per questo, possono essere dei seguenti tipi:
• StringProperty
• NumericProperty
• BoundedNumericProperty
• ObjectProperty
• DictProperty
• ListProperty
• OptionProperty
• AliasProperty
• BooleanProperty
• ReferenceListProperty
Ciclo di Vita
Compilazione e Rilascio
Windows, macOS, Linux:
• Python e dipendenze soddisfatte
Android:
• Py4A
• Kivy Launcher (Play Store)
• Buildozer
iOS:
• Xcode
• Buildozer
Progetto di esempio
Prima schermata: login
• Credenziali errate
• Credenziali corrette
• Seconda schermata: geolocator
• Immissione del luogo da ricercare
• Se trovato, visualizzazione mappa
• Comandi aggiuntivi per la mappa
Conclusioni
• Ambiente flessibile, in via di espansione e attivamente
aggiornato. Riesce a seguire bene le numerose possibilità che
Python ha da offrire.
• Dispone di un buon supporto dalla community tramite il
progetto «Garden».
• La documentazione è ricca, ben scritta ed esaustiva ma viene
aggiornata leggermente troppo tardi rispetto al rilascio della
nuova versione.
• La parte di rilascio è ancora macchinosa e adatta ad utenti
MOLTO consapevoli.
Link Utili
Azure Function per coordinate geografiche
https://www.giuneco.tech/azure-functions-in-python/
https://github.com/giocasin/GiunecoTech.AzureFunctionsPython
Progetto di esempio
https://github.com/giocasin/GiunecoTech.KivyPythonNGUI_Framework
Documentazione Kivy
https://kivy.org/doc/stable/
Giuneco
facebook.com/Giuneco
@giuneco
company/giuneco-s-r-l-
giuneco.tech
Grazie per
l’attenzione!

More Related Content

What's hot

Progettare in Team per il Responsive Web Design
Progettare in Team per il Responsive Web DesignProgettare in Team per il Responsive Web Design
Progettare in Team per il Responsive Web DesignSalvatore Paone
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMCodemotion
 
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoWorkshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoGabriele Gaggi
 
ASP.NET performance optimization
ASP.NET performance optimizationASP.NET performance optimization
ASP.NET performance optimizationAndrea Dottor
 
Integrazione con Visual Studio Online
Integrazione con Visual Studio OnlineIntegrazione con Visual Studio Online
Integrazione con Visual Studio OnlineDavide Benvegnù
 
Training Signal Webtrends
Training Signal WebtrendsTraining Signal Webtrends
Training Signal WebtrendsStefano Iaboni
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - PrismDotNetMarche
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiAndrea Dottor
 
Introduction to C#
Introduction to C#Introduction to C#
Introduction to C#Guido Magrin
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Andrea Agnoletto
 
Xamarin.Forms Introduction
Xamarin.Forms IntroductionXamarin.Forms Introduction
Xamarin.Forms IntroductionGuido Magrin
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web AppsLuca Fortin
 
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!DotNetCampus
 
Xamarin Forms: one technology to rule them all - Matteo Pagani - Codemotion R...
Xamarin Forms: one technology to rule them all - Matteo Pagani - Codemotion R...Xamarin Forms: one technology to rule them all - Matteo Pagani - Codemotion R...
Xamarin Forms: one technology to rule them all - Matteo Pagani - Codemotion R...Codemotion
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkGiovanni Buffa
 
Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Gabriele Gaggi
 
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformGabriele Gaggi
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP WayLuca Milan
 
Dot netcampus2015 green-template
Dot netcampus2015 green-templateDot netcampus2015 green-template
Dot netcampus2015 green-templateDotNetCampus
 

What's hot (20)

Progettare in Team per il Responsive Web Design
Progettare in Team per il Responsive Web DesignProgettare in Team per il Responsive Web Design
Progettare in Team per il Responsive Web Design
 
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVMRealizzare applicazioni cross-platform con Xamarin e il pattern MVVM
Realizzare applicazioni cross-platform con Xamarin e il pattern MVVM
 
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di MilanoWorkshop AngularJs, Cordova, Ionic - Politecnico di Milano
Workshop AngularJs, Cordova, Ionic - Politecnico di Milano
 
ASP.NET performance optimization
ASP.NET performance optimizationASP.NET performance optimization
ASP.NET performance optimization
 
Integrazione con Visual Studio Online
Integrazione con Visual Studio OnlineIntegrazione con Visual Studio Online
Integrazione con Visual Studio Online
 
Training Signal Webtrends
Training Signal WebtrendsTraining Signal Webtrends
Training Signal Webtrends
 
UI Composition - Prism
UI Composition - PrismUI Composition - Prism
UI Composition - Prism
 
ASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivatiASP.NET Core - dove siamo arrivati
ASP.NET Core - dove siamo arrivati
 
Introduction to C#
Introduction to C#Introduction to C#
Introduction to C#
 
Blazor: are we ready for the launch?
Blazor: are we ready for the launch?Blazor: are we ready for the launch?
Blazor: are we ready for the launch?
 
Xamarin.Forms Introduction
Xamarin.Forms IntroductionXamarin.Forms Introduction
Xamarin.Forms Introduction
 
Progressive Web Apps
Progressive Web AppsProgressive Web Apps
Progressive Web Apps
 
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
APPSTUDIO: DA ZERO ALLO STORE IN 50 MINUTI!
 
Xamarin Forms: one technology to rule them all - Matteo Pagani - Codemotion R...
Xamarin Forms: one technology to rule them all - Matteo Pagani - Codemotion R...Xamarin Forms: one technology to rule them all - Matteo Pagani - Codemotion R...
Xamarin Forms: one technology to rule them all - Matteo Pagani - Codemotion R...
 
Angular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un frameworkAngular js o React? Spunti e idee per la scelta di un framework
Angular js o React? Spunti e idee per la scelta di un framework
 
Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5Sviluppo di App cross-platform con Cordova e HTML5
Sviluppo di App cross-platform con Cordova e HTML5
 
jQuery
jQueryjQuery
jQuery
 
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platformAngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
AngularJs, Bootstrap e Cordova: il connubio per app mobile cross-platform
 
Web Api – The HTTP Way
Web Api – The HTTP WayWeb Api – The HTTP Way
Web Api – The HTTP Way
 
Dot netcampus2015 green-template
Dot netcampus2015 green-templateDot netcampus2015 green-template
Dot netcampus2015 green-template
 

Similar to Kivy Python Framework - di Gioele Gaggio

Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net Leonardo Alario
 
Qt Mobile: Sviluppo mobile con Python e Qt Framework
Qt Mobile: Sviluppo mobile con Python e Qt FrameworkQt Mobile: Sviluppo mobile con Python e Qt Framework
Qt Mobile: Sviluppo mobile con Python e Qt FrameworkAndrea Grandi
 
Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store appsDotNetCampus
 
Microsoft Azure per l'IT Pro
Microsoft Azure per l'IT ProMicrosoft Azure per l'IT Pro
Microsoft Azure per l'IT ProMarco Parenzan
 
Qt mobile PySide bindings
Qt mobile PySide bindingsQt mobile PySide bindings
Qt mobile PySide bindingsPyCon Italia
 
Custom vision on edge device
Custom vision on edge deviceCustom vision on edge device
Custom vision on edge deviceAlessio Biasiutti
 
IoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceIoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceAlessio Biasiutti
 
Introduzione a DotNetNuke
Introduzione a DotNetNukeIntroduzione a DotNetNuke
Introduzione a DotNetNukeMassimo Bonanni
 
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013Luca Zulian
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functionsdotnetcode
 
Dynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed ProgrammerDynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed ProgrammerMarco Parenzan
 
.NET & Linux: la strana coppia - DotNetDay 2018
.NET & Linux: la strana coppia - DotNetDay 2018.NET & Linux: la strana coppia - DotNetDay 2018
.NET & Linux: la strana coppia - DotNetDay 2018Fabrizio Bernabei
 
Code Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled RepositoryCode Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled RepositoryAndrea Saltarello
 
Gam05 costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...
Gam05   costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...Gam05   costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...
Gam05 costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...DotNetCampus
 
ios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaDario Rusignuolo
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il MobilePietro Libro
 
ASP.NET Core Services e Linux per il Mobile - Pietro Libro - Codemotion Rome...
ASP.NET Core Services e Linux per il Mobile  - Pietro Libro - Codemotion Rome...ASP.NET Core Services e Linux per il Mobile  - Pietro Libro - Codemotion Rome...
ASP.NET Core Services e Linux per il Mobile - Pietro Libro - Codemotion Rome...Codemotion
 
Lorenzo Bevilacqua - Sviluppo di un'applicazione iPhone per la localizzazione...
Lorenzo Bevilacqua - Sviluppo di un'applicazione iPhone per la localizzazione...Lorenzo Bevilacqua - Sviluppo di un'applicazione iPhone per la localizzazione...
Lorenzo Bevilacqua - Sviluppo di un'applicazione iPhone per la localizzazione...Lorenzo Bevilacqua
 

Similar to Kivy Python Framework - di Gioele Gaggio (20)

Writing apps for android with .net
Writing apps for android with .net Writing apps for android with .net
Writing apps for android with .net
 
Mobile e Smart Client
Mobile e Smart ClientMobile e Smart Client
Mobile e Smart Client
 
Qt Mobile: Sviluppo mobile con Python e Qt Framework
Qt Mobile: Sviluppo mobile con Python e Qt FrameworkQt Mobile: Sviluppo mobile con Python e Qt Framework
Qt Mobile: Sviluppo mobile con Python e Qt Framework
 
Cert04 70-484 - essentials of developing windows store apps
Cert04   70-484 - essentials of developing windows store appsCert04   70-484 - essentials of developing windows store apps
Cert04 70-484 - essentials of developing windows store apps
 
Microsoft Azure per l'IT Pro
Microsoft Azure per l'IT ProMicrosoft Azure per l'IT Pro
Microsoft Azure per l'IT Pro
 
Qt mobile PySide bindings
Qt mobile PySide bindingsQt mobile PySide bindings
Qt mobile PySide bindings
 
Custom vision on edge device
Custom vision on edge deviceCustom vision on edge device
Custom vision on edge device
 
IoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge deviceIoT Saturday 2019 - Custom Vision on Edge device
IoT Saturday 2019 - Custom Vision on Edge device
 
Introduzione a DotNetNuke
Introduzione a DotNetNukeIntroduzione a DotNetNuke
Introduzione a DotNetNuke
 
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013
Costruire applicazioni-cross-platform-con-xamarin-visual-studio-2013
 
Meetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure FunctionsMeetup DotNetCode A.I. Bot Framework and Azure Functions
Meetup DotNetCode A.I. Bot Framework and Azure Functions
 
Dynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed ProgrammerDynamic Language Programming For The Statically Typed Programmer
Dynamic Language Programming For The Statically Typed Programmer
 
.NET & Linux: la strana coppia - DotNetDay 2018
.NET & Linux: la strana coppia - DotNetDay 2018.NET & Linux: la strana coppia - DotNetDay 2018
.NET & Linux: la strana coppia - DotNetDay 2018
 
Code Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled RepositoryCode Contracts and Generics: implementing a LINQ-enabled Repository
Code Contracts and Generics: implementing a LINQ-enabled Repository
 
Gam05 costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...
Gam05   costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...Gam05   costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...
Gam05 costruisci il tuo antifurto perfetto con kinect e gli azure mobile se...
 
ios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - itaios 8 - parte 1 - intro - ita
ios 8 - parte 1 - intro - ita
 
Anatomia di un progetto open-source
Anatomia di un progetto open-sourceAnatomia di un progetto open-source
Anatomia di un progetto open-source
 
.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile.NET Core, ASP.NET Core e Linux per il Mobile
.NET Core, ASP.NET Core e Linux per il Mobile
 
ASP.NET Core Services e Linux per il Mobile - Pietro Libro - Codemotion Rome...
ASP.NET Core Services e Linux per il Mobile  - Pietro Libro - Codemotion Rome...ASP.NET Core Services e Linux per il Mobile  - Pietro Libro - Codemotion Rome...
ASP.NET Core Services e Linux per il Mobile - Pietro Libro - Codemotion Rome...
 
Lorenzo Bevilacqua - Sviluppo di un'applicazione iPhone per la localizzazione...
Lorenzo Bevilacqua - Sviluppo di un'applicazione iPhone per la localizzazione...Lorenzo Bevilacqua - Sviluppo di un'applicazione iPhone per la localizzazione...
Lorenzo Bevilacqua - Sviluppo di un'applicazione iPhone per la localizzazione...
 

More from Giuneco S.r.l

GraphQL in .Net Core - di Lorenzo Zarone
GraphQL in .Net Core - di Lorenzo ZaroneGraphQL in .Net Core - di Lorenzo Zarone
GraphQL in .Net Core - di Lorenzo ZaroneGiuneco S.r.l
 
Variable Fonts - di Jessica Risica
Variable Fonts - di Jessica RisicaVariable Fonts - di Jessica Risica
Variable Fonts - di Jessica RisicaGiuneco S.r.l
 
Testi per il web - di Elena Granchi
Testi per il web - di Elena GranchiTesti per il web - di Elena Granchi
Testi per il web - di Elena GranchiGiuneco S.r.l
 
Risolvi i tuoi problemi di sviluppo con agilità - di Stefano Brocchi
Risolvi i tuoi problemi di sviluppo con agilità - di Stefano BrocchiRisolvi i tuoi problemi di sviluppo con agilità - di Stefano Brocchi
Risolvi i tuoi problemi di sviluppo con agilità - di Stefano BrocchiGiuneco S.r.l
 
Svelte js - di Mattia Bonanni
Svelte js - di Mattia BonanniSvelte js - di Mattia Bonanni
Svelte js - di Mattia BonanniGiuneco S.r.l
 
Unit Test di Gabriele Seroni
Unit Test di Gabriele SeroniUnit Test di Gabriele Seroni
Unit Test di Gabriele SeroniGiuneco S.r.l
 

More from Giuneco S.r.l (6)

GraphQL in .Net Core - di Lorenzo Zarone
GraphQL in .Net Core - di Lorenzo ZaroneGraphQL in .Net Core - di Lorenzo Zarone
GraphQL in .Net Core - di Lorenzo Zarone
 
Variable Fonts - di Jessica Risica
Variable Fonts - di Jessica RisicaVariable Fonts - di Jessica Risica
Variable Fonts - di Jessica Risica
 
Testi per il web - di Elena Granchi
Testi per il web - di Elena GranchiTesti per il web - di Elena Granchi
Testi per il web - di Elena Granchi
 
Risolvi i tuoi problemi di sviluppo con agilità - di Stefano Brocchi
Risolvi i tuoi problemi di sviluppo con agilità - di Stefano BrocchiRisolvi i tuoi problemi di sviluppo con agilità - di Stefano Brocchi
Risolvi i tuoi problemi di sviluppo con agilità - di Stefano Brocchi
 
Svelte js - di Mattia Bonanni
Svelte js - di Mattia BonanniSvelte js - di Mattia Bonanni
Svelte js - di Mattia Bonanni
 
Unit Test di Gabriele Seroni
Unit Test di Gabriele SeroniUnit Test di Gabriele Seroni
Unit Test di Gabriele Seroni
 

Kivy Python Framework - di Gioele Gaggio

  • 1. Kivy Python Framework for NUI Development Gioele Gaggio Software Developer @ Giuneco
  • 2. Cosa Vedremo • Architettura • Componenti • Kv Language • Progetto di Esempio • Analisi finale
  • 3. • Framework Python Open Source per lo sviluppo rapido di applicazioni basate su interfaccia grafica. • Cross Platoform (Linux, Windows, macOS, Android, iOS e Raspberry Pi). • Integrazione nativa di input e protocolli per gli ambienti di destinazione più comuni (WM_Touch, WM_Pen, Mac OS X Trackpad e Magic Mouse, Mtdev, Linux Kernel HID, TUIO). • Engine grafico basato su OpenGL ES2, scritto in C utilizzando Cython, ed sostenuto da SDL2. • Gratuito ed utilizzabile per scopi commerciali. Kivy
  • 4. Python • Linguaggio di programmazione ad alto livello. • Object-oriented, aspect-oriented, functional. • Type sistem dinamico. • Facile da imparare. • Librerie e pacchetti a non finire. Ha avuto già qualche utilizzo nell’ambito mobile… • PyS60 per Symbian • Python CE per Windows Mobile • WinRT per Windows 8 • Py4A • SL4A
  • 5. Architettura Kivy consiste in un insieme di blocchi funzionali che permettono modularità e astrazione dal basso all’alto livello. Core Providers e Input Providers garantiscono l’utilizzo delle API specifiche in base al sistema di esecuzione L’API di gestione grafica è un’astrazione di OpenGL. Permette la creazione di oggetti grafici senza dover scrivere OpenGL code. Le funzionalità Core permettono l’utilizzo delle feature più comuni: • Clock per schedulare timer events; • Cache • Gesture detection (è possibile addestrarlo per riconoscere le proprie gesture personalizzate) • Kivy Language • Properties
  • 6. Architettura Il modulo UIX contiene: • Widgets: elementi UI che permettono di aggiungere funzionalità alla propria applicazione. • Layouts: contenitori di widgets per impostare posizione e grandezza dei vari elementi. Moduli Esterni che permettono di aggiungere funzionalità out of the box ad una propria applicazione. Eventi gestiti direttamente da input utente (come tap o click) o generate e distribuiti a widget nestati o alla parte logica.
  • 8. Kv Language • Permette di creare il proprio «widget tree» dichiarando le «rules» separando la parte logica da quella di interfaccia grafica • Le rules utilizzano le stesse regole di indentazione di Python. • Viene definito un widget root, oppure una classe, atto a contenere le regole del file. • Permette di definire i proprio Widget estendendo quelli già esistenti. E’ in grado di comprendere il contesto applicativo e quello locale tramite l’utilizzo di tre parole chiave: • app: fa riferimento all’istanza della propria applicazione. • root: fa riferimento al widget/template che definisce il file Kv. • self: fa sempre riferimento al widget corrente.
  • 9. Kv Language Riduce o annulla la scrittura di codice Python lato logico per definire gli oggetti grafici. Python Kv
  • 10. Eventi • Scheduling di eventi senza dover interrompere l’esecuzione del main loop dell’applicazione • Scheduling di eventi su determinate condizioni o comandi • Scheduling di eventi basati su widget: • Property event: cambio di posizione, dimensioni… • Widget-defined event: evento generato al click, tap, inserimento di testo…
  • 12. Properties • Creazione diretta di un evento associato ad uno specifico attributo. • Al cambiamento del valore, sia da interfaccia grafica che dalla parte logica, viene lanciato un evento • Sono strettamente legate al tipo di dato al quale devono essere in ascolto. Per questo, possono essere dei seguenti tipi: • StringProperty • NumericProperty • BoundedNumericProperty • ObjectProperty • DictProperty • ListProperty • OptionProperty • AliasProperty • BooleanProperty • ReferenceListProperty
  • 14. Compilazione e Rilascio Windows, macOS, Linux: • Python e dipendenze soddisfatte Android: • Py4A • Kivy Launcher (Play Store) • Buildozer iOS: • Xcode • Buildozer
  • 15. Progetto di esempio Prima schermata: login • Credenziali errate • Credenziali corrette • Seconda schermata: geolocator • Immissione del luogo da ricercare • Se trovato, visualizzazione mappa • Comandi aggiuntivi per la mappa
  • 16. Conclusioni • Ambiente flessibile, in via di espansione e attivamente aggiornato. Riesce a seguire bene le numerose possibilità che Python ha da offrire. • Dispone di un buon supporto dalla community tramite il progetto «Garden». • La documentazione è ricca, ben scritta ed esaustiva ma viene aggiornata leggermente troppo tardi rispetto al rilascio della nuova versione. • La parte di rilascio è ancora macchinosa e adatta ad utenti MOLTO consapevoli.
  • 17. Link Utili Azure Function per coordinate geografiche https://www.giuneco.tech/azure-functions-in-python/ https://github.com/giocasin/GiunecoTech.AzureFunctionsPython Progetto di esempio https://github.com/giocasin/GiunecoTech.KivyPythonNGUI_Framework Documentazione Kivy https://kivy.org/doc/stable/