Rogdham

Premier contact avec Kivy

Introduction

Vous souvenez-vous de ce xckd ?

Python makes you fly

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 ?

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.

Test de l’application

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 :

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 :

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 !

  1. 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 !
  2. Il est juste dommage qu’il faille absolument activer JavaScript pour pouvoir y accéder.

Cet article est sous licence CC BY-SA.

Le xkcd est sous CC BY-NC 2.5.

Le code source est sous CC 0.

L’image de l’application, dérivée d’OpenStreetMap, est sous CC BY-SA.

Adresse courte de l’article : https://r.rogdham.net/14.