GERBELOTBARILLON.COM

Parce qu'il faut toujours un commencement...

Kivy

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 :

Principe


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 :

  1. importer la bibliothèque kivy de base pour obtenir l'objet App par from kivy.app import App
  2. créer un objet python classique qui hérite de l'App de Kivy class MonProgrammeApp(App)
  3. depuis le programme principal, appel de la méthode run() de l'objet précédemment créé par 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.

Properties


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
.

Les méthodes spécifiques de Kivy


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é.

Dessiner avec Kivy


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

  • Couleurs : par la méthode Color(r, g, b), qui provient de la bibliothèque kivy.graphics.context_instructions qu'il faut importer par from kivy.graphics.context_instructions import Color
  • Lignes : par la méthode Line(points=[x1, y1, x2, y2]) en n'oubliant pas d'importer la bibliothèque associée par 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.

Références

2021 © LGB