Kivy est un framework complet pour la création d'interfaces nouvelles comme des applications multitouches. Développé en Python/Cython/OpenGL ES 2 et sous licence LGPL, ce framework a la capacité de tourner sur Windows, MacOSX, Linux, Android (iOS en développement).
Cette version 1.0.7 intègre une gestion de configuration d'application, les outils nécessaires pour faire un paquet sous les différentes plateformes, et des performances accrues grâce à une gestion optimisée des textures.
Par ailleurs, l'équipe de Kivy a développé PreseMT, un outil permettant la création de présentation. Cet outil consiste à mettre des images et du texte sur un plan infini, puis d'enregistrer des vues de ce plan comme des vignettes.
Kivy est modulaire et découpé en plusieurs parties.
Core providers
Au lieu d'utiliser une bibliothèque précise pour la lecture d'image, de vidéos… Kivy a une approche abstraite. Chaque fonctionnalité est implémentée une ou plusieurs fois en utilisant diverses bibliothèques. Ce qui permet au framework d'utiliser la meilleure implémentation selon la plateforme ou le système courant.
Par exemple, le chargement d'image peut se faire avec Pygame, PIL, la lecture de la caméra peut se faire avec OpenCV, GStreamer, VideoCapture, etc.
Inputs
La gestion des inputs est toujours problématique tant par la diversité de ceux-ci et par les multiples approches possibles. Kivy a opté pour une structure de données unique quelle que soit l'entrée: souris, tablette, stylet, fiducials, kinect, accéléromètre, etc.
Cette structure, nommée MotionEvent, est générée par un ou plusieurs "Input Providers", qui sont automatiquement créés par Kivy selon la plateforme. À ce jour, Kivy gère nativement les évènements multitouches WM_Touch, WM_Pen de Windows, MTDev, HIDInput et LinuxWacom sous Linux (selon noyau et disponibilité), MacOSX, Android, ainsi que TUIO.
Ensuite, cette structure est envoyée dans l'arbre des widgets par 3 événements uniques: on_touch_down, on_touch_move, on_touch_up, si le MotionEvent contient au minimum une information de position 2D. Sinon, ce n'est pas considéré comme une touch. Il est toujours possible de s'inscrire à la fenêtre et de récupérer tous les évènements d'entrées.
À noter que Kivy intègre un simulateur multitouch avec la souris : le bouton droit permet de laisser une touche à l'écran, indiquée par un rond rouge.
Graphics
Un moteur graphique optimisé pour l'affichage 2D est basé sur OpenGL ES 2. Cette version est celle que l'on retrouve en grande majorité dans les mobiles et utilise une manière moderne de faire du rendu graphique. En se restreignant à ces instructions, Kivy est capable de faire son rendu sur les ordinateurs de bureaux ou les mobiles.
Kivy implémente par défaut plusieurs instructions pour changer la couleur, tracer des rectangle, ellipse… en utilisant une texture ou non. Un point intéressant est son compilateur d'instructions à la volée qui permet, après analyse, de réduire le nombre d'instructions graphiques à envoyer au GPU à son minimum. Cette partie est encore en cours de développement, mais le but serait de pouvoir de combiner les instructions entre elles dans la mesure du possible.
Widgets
Plus de 20 widgets sont disponibles, utilisant les couches décrites ci-dessus. La base d'un Widget est basée sur des évènements, et liée à des instructions graphiques. Lorsque l'on change une propriété du widget, celui-ci mettra à jour sa représentation graphique, et déclenchera un nouvel affichage.
Un langage nommé Kv a été créé afin de permettre de créer rapidement une représentation graphique d'un widget, ainsi que de créer des interactions. Ce langage s'apparente à QML de Qt, ou encore à la CSS pour HTML.
Aller plus loin
- Kivy - Site officiel (1119 clics)
- Kivy - Documentation (251 clics)
- Kivy - Code source (94 clics)
- Kivy 1.0.7 - L'annonce (40 clics)
- PreseMT - Code source (111 clics)
- Video Kivy sur Android (385 clics)
- Video Planet White (145 clics)
# Multitouche?
Posté par drakmaniso . Évalué à 10.
Je m'en veux de jouer le pinailleur de service, mais je trouve que "multitouche" est une traduction quelque peu malheureuse. Quelque chose comme "tactile multi-point" serait plus clair, amha. À moins que je n'aie manqué une nouvelle saillie de nos chers académiciens?
[^] # Re: Multitouche?
Posté par FlashCode (site web personnel, Mastodon) . Évalué à 0.
Tout à fait d'accord (et pour pinailler aussi, "multi-touches" serait à mon avis plus approprié que "multitouches", même si cette traduction est effectivement hasardeuse).
WeeChat, the extensible chat client
[^] # Re: Multitouche?
Posté par zebra3 . Évalué à 2.
Je ne pense pas que ça vienne de nos académiciens, ils ont plus d'imagination que ça et il en faut pour traduire « chat » en « éblabla ». Ils ne se contenteraient pas d'un vulgaire « multitouche » trop proche de l'original.
Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur
[^] # Re: Multitouche?
Posté par drakmaniso . Évalué à 1.
Oui, enfin ils ont bien commis "mél"…
C'est surtout qu'ici "multitouche" n'est pas cohérent avec les différents sens du mot "touche": le mot auquel il fait réellement référence est "toucher". En anglais "touch" est à la fois un verbe et un nom désignant l'action correspondante. En français le mot "touche", qui est bien dérivé de "toucher", ne signifie pas "action de toucher".
[^] # Re: Multitouche?
Posté par Frédéric Heulin . Évalué à -1.
Extrait du tlfi :
[^] # Re: Multitouche?
Posté par drakmaniso . Évalué à 2.
Sauf que tu ne cites que le début de la définition.
"touche" ne désigne l'action de toucher que pour quelques sens très spécifiques: en escrime, en religion (au figuré), et quelques autres utilisations en vieux français.
En aucun cas, "touche" n'est une traduction de "touch" en anglais. En aucun cas il ne peut servir à désigner l'action de poser un doigt sur un écran - ce qui est le sujet, ici.
[^] # Re: Multitouche?
Posté par Bruce Le Nain (site web personnel) . Évalué à 2.
mél. est uniquement un symbole, comme tél., pas un substantif :)
source: http://www.academie-francaise.fr/langue/questions.html#courriel
[^] # Re: Multitouche?
Posté par Tom . Évalué à 1.
Ce n'est pas simplement le pluriel de multitouch (en anglais) ?
[^] # Re: Multitouche?
Posté par drakmaniso . Évalué à 1.
Intéressant. En anglais, "multitouch" ne s'accorde pas (dans "multitouch applications"). Mais il est possible que l'accord soit obligatoire si on emprunte le mot dans une phrase en français… Quelqu'un pour confirmer?
# Présentation aux RMLL
Posté par Sébastien Wilmet . Évalué à 6.
Il y a eu une présentation aux RMLL cette année sur Kivy.
Et il faut dire que c'est assez impressionnant !
[^] # Re: Présentation aux RMLL
Posté par tito (site web personnel) . Évalué à 1.
Par ailleurs, je ne l'ai pas encore annoncé, mais l'outil de présentation utilisé lors du talk est dispo sur https://github.com/tito/kary
Ainsi que les slides animés: http://txzone.net/files/projects/kivy/rmll2011-kivy-talk.zip (50Mo, avec les vidéos)
[^] # Re: Présentation aux RMLL
Posté par sifu . Évalué à 2.
Je viens de tester ton outils ça a l'ai sympa ;-) Par contre, j'ai pas réussi à changer la taille de le fenêtre. Du coup, pour faire une vraie présentation c'est difficilement utilisable.
Je trouve que c'est un peu dans l'esprit de rst2s5 ([1]) que je trouve fort pratique.
[1] http://docutils.sourceforge.net/docs/user/slide-shows.html
[^] # Re: Présentation aux RMLL
Posté par tito (site web personnel) . Évalué à 2.
Pour changer la taille de la fenêtre, c'est les options de kivy lui même:
Ou alors, édite le fichier de conf ~/.kivy/config
[^] # Re: Présentation aux RMLL
Posté par sifu . Évalué à 2.
Merci. Cela fonctionne parfaitement.
[^] # Re: Présentation aux RMLL
Posté par highleaf . Évalué à -1.
Bonjour,
D'après ce que j'ai pu lire dans la doc, pour changer la taille de la fenêtre, il faut utiliser les tokens de configuration.
La page de documentation correspondante : http://kivy.org/docs/api-kivy.config.html
Dommage que Kivy n'ait pas un forum francophone.
# Kivy / Processing
Posté par highleaf . Évalué à 5.
Bonjour,
Comment se positionne ce framework par rapport à un outil complet comme Processing par exemple ? Est-ce qu'on produit au final des choses similaires ou est-ce que cela n'a complètement rien à voir ? Car dans les dernières versions de Processing, on peut produire aussi pour Android et gérer les écrans tactiles.
Est-ce qu'on doit le comparer davantage à QtQuick par exemple, car je vois des similarités entre le QML et le langage kv ?
http://kivy.org
http://processing.org
http://qt.nokia.com/qtquick
Merci pour vos réponses et points de vue.
[^] # Re: Kivy / Processing
Posté par tito (site web personnel) . Évalué à 3.
Ce n'est pas vraiment le même type de librarie. Dans Processing, tu n'as pas de hiérarchie ou de widgets. Si je ne me trompe pas, tu fais un peu tout à partir d'une fonction draw() et c'est tout. A toi de gérer la souris ou le "tactile multi-point" comme tu veux.
On rajoute une couche de Widget et une gestion uniforme des entrées en quelques sortes. Mais cela ne remplace pas Processing. Il est plus facile de faire quelque chose d'artistique sur un ce dernier, car la logique est plus commune: tu dis ce que tu veux tracer pour chaque image. De notre coté, tu dois préparer tes instructions.
Pour ce qui est de QML, le langage Kv est très proche dans la logique. QML a été un peu comme un coup de foudre pour nous pour son approche. Mais nous ne voulions pas l'utiliser, et rester proche de Python. Et nous voulions aller plus loin, comme créer des templates, des règles à la CSS etc.
[^] # Re: Kivy / Processing
Posté par highleaf . Évalué à 4.
Je vous remercie pour vos éclaircissements.
J'ai parcouru davantage la documentation Kivy et fait quelques essais.
Par rapport à Processing, il est vrai qu'ils n'ont pas la même finalité. L'avantage de Kivy est tout le processus industriel autour : un vrai framework, une vraie documentation, des outils de gestion des fichiers log, des outils de gestion des configurations, des outils de déploiement et une abstraction intuitive même dans la syntaxe de création des objets. J'aime aussi la possibilité d'évaluer des expressions Python directement dans le langage kv, très pratique. Je pense que Kivy ne demande qu'à s'enrichir en terme de fonctionnalités. On peut déjà néanmoins y inclure presque n'importe quelle librairie Python disponible (importer des données Sqlite, générer des flux RSS avec feedparser et afficher dans une scrollview).
Par rapport à Qt/QtQuick, je trouve la gestion des échanges entre les vues et les contrôleurs beaucoup plus intuitive et simple que les échanges à la Qt, même si cela y ressemble fortement. Pour avoir fait quelques tests avec PySide et QtQuick, j'ai toujours trouvé et la documentation et la logique trop calquée sur une logique C++ qu'une logique Python pour des raisons techniques et historiques connues. Si l'on trouve énormément de documentation Qt / QtQuick pour C++, l'on en trouve moins pour Python. De plus l'implémentation Qt / QtQuick est peu documentée. Les QtAbstract ne sont pas évidentes à implémenter en Python et QtQuick par exemple lorsqu'on doit gérer des scrollview avec des lignes constituées de plusieurs champs différents provenant d'une base de données. Les modèles abstraits sont complexes à mettre en place. Je trouve la logique de Kivy plus orientée Python et finalement plus claire. En terme de performance, QtQuick rame pas mal sur des smartphones (ARM 800 MHz par exemple).
Bref j'ai un sentiment positif et de fraîcheur après m'être documenté sur Kivy et son approche.
P.S : je vous ai en fait découvert en cherchant une vieille bibliothèque graphique PyUI (http://pyui.sourceforge.net/) qui utilisait également OpenGL pour le rendu.
Bonne continuation.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.