Kivy
Kivy est une plateforme open source pour Python. Elle propose des méthodes de développement rapide d'applications innovantes telles que celles basées sur le multi-touch.
Ses principales caractéristiques sont :
Le squelette d'une application Kivy est assez simple : 1 fichier python pour les objets et un fichier au format .kv pour contenir le design de l'interface graphique. On peut faire une analogie de structure avec Xamarin qui fonctionne en XML first et en Code behind en C#. Et bien Kivy c'est la même chose...mais en plus agréable...
Le programme python va :
from kivy.app import App
class MonProgrammeApp(App)
MonProgrammeApp().run()
Pour créer la partie graphique, cela s'effectue donc généralement depuis un fichier différent du programme python. Le fichier est au format .kv, que nous verrons un peu plus tard mais ce qu'il faut retenir, c'est que le fichier de l'interface sera automatiquement appelé par Python si ce fichier porte le même nom que l'objet application précédemment créé. Dans l'exemple, la classe de l'objet était MonProgrammeApp. Il faudra donc que le fichier de description de l'interface soit appelé MonProgramme.kv. Ce n'est pas plus compliqué que cela. Pas besoin d'ouvrir et d'importer un fichier, cela se déroule tout seul.
Le code ci-après définit un canevas de base d'un programme ptyhon + kivy. Par exemple si le programme principal s'appelle main.py
from kivy.app import App
from kivy.uix.widget import Widget
class MainWidget(Widget):
pass
class MonProgrammeApp(App):
pass
if __name__ == "__main__":
MonProgrammeApp().run()
Le fichier de description Kivy est le suivant, en le nommant bien MonProgramme.kv :
MainWidget:
Il se contente de référencer le widget principal à partir duquel l'interface va être construite.
En exécutant le programme python main.py
, vous allez automatiquement demander à Kivy
d'entrer en lice et au final vous obtiendrez une simple fenêtre graphique avec un fond noir.
Le passage de valeurs entre le code Python et les définitions Kivy n'est pas possible par défaut. Il faut recourir à des éléments particuliers : les Properties. Elles existent sous différents formats et s'importent depuis la bibliothèque kivy.properties.
L'avantage des properties de Kivy est que nous pouvons interagir avec elles à la fois depuis Kivy mais également
depuis le programme python. Il y a même la possibilité de mettre en place une méthode qui sera appelée automatiquement
par Python lorsque les valeurs de cette property seront modifiées. Sa construction respecte la syntaxe suivante :
def on_<nom_de_la_property>(self, widget, value)
. Le paramètre value contiendra
la nouvelle valeur de la property.
La définition d'une Property avec Kivy s'effectue par nom_de_la_property: valeur
. Avec Python ce serait
simplement
from kivy.properties import NumericProperty
self.nom_de_la_property = NumericProperty(0)
self.nom_de_la_property = valeur
.
on_parent(self, widget, parent) : appelée lorsque le widget est attaché à une interface. Par exemple lorsque la MainWidget est créée dans l'App parente. on_size(self, *args) : lorsque le widget parent est redimensionné.
Par défaut, si l'on utilise le widget nommé MainWidget (wui dérive de widget), nous disposons, sans le savoir, d'une zone graphique nommé canvas. Sur cette zone nous allons pouvoir appliquer des
from kivy.graphics.context_instructions import Color
from kivy.graphics.vertex_instructions import Line
Avec Kivy, les couleurs sont, comme pour OpenGL finalement, appliquées à l'ensemble des objets suivant la définition de la couleur, tant que celle-ci n'est pas modifiée. Cela constitue la machine à état d'OpenGL.