Premier contact avec Kivy
Introduction
Vous souvenez-vous de ce xckd ?
C’est tout à fait l’impression que l’on a lorsque l’on découvre Kivy.
Le but de cet article n’est pas de vous présenter cette bibliothèque Python1, mais de vous faire partager cette impression.
Installation
Sous ArchLinux, l’installation est triviale avec AUR : yaourt -S kivy
.
Pour les autres systèmes, je vous laisse regarder sur le site officiel.
Apprentissage
C’est sans doute un gros point fort de Kivy : la documentation est juste excellente.
Tout d’abord, pour l’apprentissage de base, vous êtes amenés, pas à pas, à recréer le jeu Pong. C’est simple, rapide, et vous donne envie d’en apprendre plus. Vous commencez donc à écrire utiliser la bibliothèque, et invariablement, vous voulez plus d’informations.
Il est alors temps pour vous de regarder le contenu du dossier examples
et de
tester les applications, lire leur code source, apprendre.
Et pour l’utilisation de tous les jours, la documentation est à nouveau d’un grand secours : l’API est très bien documentée. C’est un plaisir2 de lire la documentation en ligne, et ça doit être un plaisir également de contribuer au projet Kivy lui-même, puisque la documentation est directement écrite dans le code Python. Ainsi, pas besoin de faire des aller-retours avec le site web.
Application de test
Place à la pratique ! L’application d’exemple nommée “pictures”
(examples/demo/pictures
) est très sympa, mais serait-il possible de
télécharger un morceau d’OpenStreetMap plutôt que d’utiliser des images
présentes sur le disque dur ?
De quoi avons-nous besoin ?
- les URL des images: plutôt que de plonger dans l’API d’OpenStretMap (ce n’est pas l’objet de cet article), un hack rapide fera l’affaire : allez sur le site d’OpenStreetMap avec votre navigateur préféré, clic droit sur la carte, afficher l’image, et récupérez l’URL d’une tuile ;
- pouvoir récupérer des images sur le web, et les utiliser dans un widget
Image
… la documentation nous oriente judicieusement versAsyncImage
; - accrocher les tuiles de la carte ensemble : une fois de plus, en lisant la
documentation, on tombe directement sur
GridLayout
.
Il n’y a plus qu’à écrire le code !
import random
from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.image import AsyncImage
from kivy.uix.scatter import Scatter
from kivy.uix.widget import Widget
class OSMApp(App):
def build(self):
# map information
size = 12
zoom = 15
row_id = 11265
col_id = 16592
# create the grid widget
grid = GridLayout(cols=size, rows=size)
# add the tiles one after the other
for rid in xrange(row_id, row_id + grid.rows):
for cid in xrange(col_id, col_id + grid.cols):
grid.add_widget(AsyncImage(
source="http://%s.tile.openstreetmap.org/%d/%d/%d.png"
# load balancing between the 3 servers
% (random.choice("abc"), zoom, cid, rid)
))
# put the grid into a scatter to be able to move/resize/etc
scatter = Scatter()
scatter.add_widget(grid)
# and add it to the root widget
root = Widget()
root.add_widget(scatter)
return root
if __name__ == "__main__":
OSMApp().run()
Il est à noter ici que je me suis limité au fichier .py
, il aurait été
possible (et peut-être préférable) de créer un fichier osm.kv
. Et de de
déplacer une partie du code dans un OSMGrid
… Mais le but était de faire un
test rapide.
Si vous voulez supprimer la possibilité de rotation, il suffit de passer un
paramètre lors de l’instantiation de Scatter
: Scatter(do_rotation=False)
.
Conclusion
Je ne vous ai pas parlé des points suivant :
- performances élevées
- multi-OS (Gnu/Linux, Android, Windows, MacOs, iOS) et multi-plateformes (ordinateur, tablette, smartphone)
- le système de proriétés très agréable (à ne pas confondre
avec les
property
de Python) - intégration avec twisted
- développement actif
- sous LGPL
Cependant, tant de bonnes choses ont un prix : Kivy requiert un nombre de dépendances important, ce qui peut être un frein sur des plateformes où la mémoire est plus que limitée. Également, je déconseille Kivy si vous voulez une bonne intégration de votre application dans un environnement de bureau (Gnome par exemple).
Par contre, Kivy est définitivement à considérer dans les cas suivants :
- vous développez pour plusieurs plateformes ou systèmes d’exploitation
- votre application est destinée aux plateformes avec interface tactile multi-point
- l’intégration dans un environnement de bureau n’a pas d’importance, puisque de toute façon vous n’utilisez pas de barre de menus, de boutons et autres (par exemple si vous développez un jeu)
Et ceci même si vous visez seulement les ordinateurs tournant sous un système d’exploitation particulier, et donc que les interactions multi-point ne vous intéressent pas.
Kivy donne des ailes, profitez-en !
- ↑ Je vous renvoie à un article de Linuxfr, ou tout simplement au site officiel. N’hésitez pas à regarder des exemples de réalisations, pour vous donner une idée des possibilités !
- ↑ Il est juste dommage qu’il faille absolument activer JavaScript pour pouvoir y accéder.