Outils pour utilisateurs

Outils du site


kivy_les_fichiers_kv

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
kivy_les_fichiers_kv [2018/03/22 07:11] – [Les directives de Lang] sergekivy_les_fichiers_kv [2020/10/29 13:50] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. serge
Ligne 1: Ligne 1:
-=====Kivy: Les fichiers kv=====+======Kivy: Les fichiers kv====== 
 +<WRAP center round box 60% centeralign> 
 +**{{tagpage>kivy|Toutes les pages Kivy}}** 
 +**[[http://translate.google.com/translate?hl=&sl=auto&tl=en&u=https%3A%2F%2Fressources.labomedia.org%2Fkivy_les_fichiers_kv|English Version]]** 
 +</WRAP> 
 +<WRAP center round box 40% centeralign> 
 +**[[les_pages_kivy_en_details|Les pages Kivy en détails]]** 
 +</WRAP> 
 +<WRAP center round box 60% centeralign> 
 +{{ media_05:comments_in_kv.png?600 |}}\\  
 +Avec des commentaires ! 
 +</WRAP> 
 +===== Le langage kivy dans les fichiers *.kv =====
  
-==== Le langage kivy dans les fichiers *.kv ====+  * [[https://kivy.org/docs/guide/lang.html|Documentation Kivy sur le langage kivy]] 
 +  Ce qui suit est une adaptation de kivy-vision.fr qui n'est plus en ligne
  
-  * https://kivy.org/docs/guide/lang.html doc off +===== Ressources sur les fichiers kv =====
-  * Ce qui suit est une adaptation de http://www.kivy-vision.fr/kivy/le-langage-kivy/+
- +
-==== kv ====+
  
   * [[http://kivy.org/docs/api-kivy.lang.html|Kivy Language]]   * [[http://kivy.org/docs/api-kivy.lang.html|Kivy Language]]
   * [[http://kivy.org/docs/guide/lang.html|Programming Guide Kv language]]   * [[http://kivy.org/docs/guide/lang.html|Programming Guide Kv language]]
-  * [[http://kivy.org/docs/guide2/lang.html|Programming Guide 2 Kv language]] 
  
-=== Nommage pour le fichier kv ===+===== Nommage pour le fichier kv =====
  
   * [[http://www.blog.pythonlibrary.org/2013/11/25/kivy-101-how-to-use-boxlayouts/|Un tuto]] repris en partie ici pour le nommage.   * [[http://www.blog.pythonlibrary.org/2013/11/25/kivy-101-how-to-use-boxlayouts/|Un tuto]] repris en partie ici pour le nommage.
  
-== Exemple ==+==== Exemple ====
  
 **app_with_kv.py** **app_with_kv.py**
Ligne 23: Ligne 32:
 ''' '''
 Application from a .kv Application from a .kv
-======================+
 The root application is created from the corresponding .kv. Check the test.kv The root application is created from the corresponding .kv. Check the test.kv
 file to see what will be the root widget. file to see what will be the root widget.
Ligne 53: Ligne 62:
 Si vous ne respectez pas la convention, vous n'aurez pas d'erreur mais seulement une fenêtre noire. Si vous ne respectez pas la convention, vous n'aurez pas d'erreur mais seulement une fenêtre noire.
  
-=== Comment adapter un main.py avec Builder.load_string() pour un fichier *.kv ===+===== Comment adapter un main.py avec Builder.load_string() pour un fichier *.kv =====
  
 Permet de comprendre comment les éléments du fichier kv sont lu! Permet de comprendre comment les éléments du fichier kv sont lu!
  
-== Sans kv ==+=== Sans kv ===
  
 **without_kv.py** **without_kv.py**
Ligne 87: Ligne 96:
 </code> </code>
  
-== Avec kv ==+=== Avec kv ===
  
 **with_kv.py** **with_kv.py**
Ligne 116: Ligne 125:
         text: "bla bla !"         text: "bla bla !"
 </code> </code>
-=== Explications sur les fichiers *.kv ===+===== Pricipes des fichiers *.kv =====
  
-== Règles ==+=== Règles ===
  
 Une règle s'applique à des widgets en particulier (ou par catégorie) dans votre arbre de widgets et les modifie d'une certaine façon. Vous pouvez utiliser des règles pour spécifier des comportements interactifs ou pour ajouter des représentations graphiques aux widgets auxquelles elles s'appliquent. Vous pouvez créer une règle qui s'applique à une classe particulère de widget en utilisant l'attribut cls (e.g. cls=MonWidgetTest). Une règle s'applique à des widgets en particulier (ou par catégorie) dans votre arbre de widgets et les modifie d'une certaine façon. Vous pouvez utiliser des règles pour spécifier des comportements interactifs ou pour ajouter des représentations graphiques aux widgets auxquelles elles s'appliquent. Vous pouvez créer une règle qui s'applique à une classe particulère de widget en utilisant l'attribut cls (e.g. cls=MonWidgetTest).
  
-== Un widget racine ==+=== Un widget racine ===
  
 Vous pouvez utiliser le langage pour créer tout l'interface utilisateur. Un fichier kv doit contenir un seul root widget. Vous pouvez utiliser le langage pour créer tout l'interface utilisateur. Un fichier kv doit contenir un seul root widget.
  
-== Des templates ==+=== Des templates ===
  
 Des templates seront utilisés pour construire des morceaux de votre application, comme des listes de contenu, ou par exemple, si vous voulez concevoir l'aspect d'une ligne dans une liste(icone à gauche, texte à droite). Des templates seront utilisés pour construire des morceaux de votre application, comme des listes de contenu, ou par exemple, si vous voulez concevoir l'aspect d'une ligne dans une liste(icone à gauche, texte à droite).
  
-=== Syntaxe d'un fichier kv ===+===== Syntaxe d'un fichier kv =====
  
 Le fichier peut contenir des défitions de règles, un widget racine et des templates: Le fichier peut contenir des défitions de règles, un widget racine et des templates:
Ligne 136: Ligne 145:
 <code python> <code python>
 # Syntaxe de la définition d'une règle. Plusieurs règle peuvent partager la même définition. # Syntaxe de la définition d'une règle. Plusieurs règle peuvent partager la même définition.
-#(as in CSS). Remarquez les caractère <>; Ils font parti de la définition.+#(as in CSS). Remarquez les caractère <>; Ils font partie de la définition.
 <Rule1,Rule2>: <Rule1,Rule2>:
     # .. definitions ..     # .. definitions ..
Ligne 176: Ligne 185:
 La propriété canvas est spéciale: vous pouvez indiquer des instructions de graphisme à l'intérieur pour créer des dessins dans la classe courrante. La propriété canvas est spéciale: vous pouvez indiquer des instructions de graphisme à l'intérieur pour créer des dessins dans la classe courrante.
  
-==== Expressions Valeur et mots réservés ====+===== Expressions Valeur et mots réservés =====
  
 Lorsque vous indiquez la valeur d'une propriété, l'expression est évaluée comme une expression python. Cette expression peut être statique ou dynamique, ce qui veut dire que cette valeur peut utiliser les valeurs d'autres propriétés en utilisant des mots réservés. Lorsque vous indiquez la valeur d'une propriété, l'expression est évaluée comme une expression python. Cette expression peut être statique ou dynamique, ce qui veut dire que cette valeur peut utiliser les valeurs d'autres propriétés en utilisant des mots réservés.
  
-=== self ===+==== self ====
  
-Le mot clé self fait référence à l'instance du widget courant:+Le mot clé self fait référence à l'instance du widget courant ici l'object MainScreen du main.py:
  
 <code python> <code python>
-Button+<MainScreen>
-    text: "My state is {}".format(self.state)+    Button: 
 +        text: "My state is {}".format(self.state)
 </code> </code>
-=== root ===+==== root ====
  
 Ce mot clé n'est disponible que dans la définition des règles, et représente le widget racine de la règle (la première instance de la règle). Ce n'est pas le widget racine de tous les widgets. Ce mot clé n'est disponible que dans la définition des règles, et représente le widget racine de la règle (la première instance de la règle). Ce n'est pas le widget racine de tous les widgets.
Ligne 222: Ligne 232:
         return root         return root
 </code> </code>
-=== app ===+==== app ====
  
 Ce mot clé se réferre toujours à l'instance de votre application.\\ Ce mot clé se réferre toujours à l'instance de votre application.\\
Ligne 233: Ligne 243:
 Avec TestApp(App) retourne testapp Avec TestApp(App) retourne testapp
  
-=== args ===+==== args ====
  
-Ce mot clé est disponible dans les on_<html><action></html> callbacks. Il fait référence aux arguments passés au callback:+Ce mot clé est disponible dans les on_action callbacks. Il fait référence aux arguments passés au callback:
  
 <code python> <code python>
Ligne 253: Ligne 263:
 Attention, l'id ne sera pas disponible dans l'instance du widget. L'attribut id ne sera pas utilisé. Attention, l'id ne sera pas disponible dans l'instance du widget. L'attribut id ne sera pas utilisé.
  
-==== Lien entre valeurs et propriétés ====+====Exemple de récupération d'une propriété d'une autre class==== 
 +Extrait de [[smartcitizen|Kivy: Application Android Smart Citizen]] 
 +{{ media_05:kivy_text_explication.png?800 |}} 
 +Cet exemple pourrait être un excercice dans une interro surprise! On applique bêtement le cours ! "Mais, M'sieur, j'ai pas compris, j'ai pas compris, .... !" 
 +  * app: Ce mot clé se réferre toujours à l'instance de votre application, soit SmartCitizenApp 
 +  * root: Ce mot clé n'est disponible que dans la définition des règles, et représente le widget racine de la règle, soit SmartCitizen 
 +  * ids: [[https://kivy.org/doc/stable/api-kivy.uix.widget.html#kivy.uix.widget.Widget.ids|appel d'un widget par son id]], ici l'id est sm, soit le screen manager 
 +  * get_screen('first') est le premier écran Screen1 
 +  * owner_detail: est un attribut de class de Screen1, défini dans cette class par self.owner_detail
  
-Lorsque vous utilisez le langage Kivy, vous aurez remarqué que nous effectuons un certains travail en tâche de fond pour faire que les choses se déroulent correctement. Vous devriez savoir que les propriétés implémentente le logiciel observateur de modèle conception: cela veut dire que vous pouvez lier vos propres fonctions qui seront appelée quand la valeur d'une propriété changera.+===== Lien entre valeurs et propriétés ===== 
 + 
 +Lorsque vous utilisez le langage Kivy, vous aurez remarqué que nous effectuons un certains travail en tâche de fond pour faire que les choses se déroulent correctement. Vous devriez savoir que les propriétés implémentent le logiciel observateur de modèle conception: cela veut dire que vous pouvez lier vos propres fonctions qui seront appelée quand la valeur d'une propriété changera.
  
 Le langage Kivy détecte les propriétés dans votre expression value et créé des callbacks pour mettre à jour automatiquement la propriété en utilisant votre expression lorsqu'un changement intervient. Le langage Kivy détecte les propriétés dans votre expression value et créé des callbacks pour mettre à jour automatiquement la propriété en utilisant votre expression lorsqu'un changement intervient.
Ligne 271: Ligne 291:
 <code python> <code python>
 Button: Button:
-    text: 'Plop world' if self.state == 'normal' else 'Release me!'+    text: 'Plop the world' if self.state == 'normal' else 'Release me!'
 </code> </code>
 Le texte du bouton change en fonction de l'état de celui-ci. Par défaut, le texte sera 'Plop the world', mais lorque le bouton est appuyé, le texte sera alor 'Release me!'. Le texte du bouton change en fonction de l'état de celui-ci. Par défaut, le texte sera 'Plop the world', mais lorque le bouton est appuyé, le texte sera alor 'Release me!'.
  
-==== Instructions graphiques ====+===== Instructions graphiques =====
  
-=== Classes dynamiques ===+==== Classes dynamiques ====
  
 Les classes dynamiques vous permettent de créer de nouveaux widgets à la volée, sans aucune déclaration python au préallable. La syntaxe des classes dynamiques est semblable à celle des règles, mais vous devez spécifier la ou les classes de base. Les classes dynamiques vous permettent de créer de nouveaux widgets à la volée, sans aucune déclaration python au préallable. La syntaxe des classes dynamiques est semblable à celle des règles, mais vous devez spécifier la ou les classes de base.
Ligne 333: Ligne 353:
 </code> </code>
  
-==== Redéfinir le style d'un widget ====+===== Redéfinir le style d'un widget =====
  
 Nous aimerions quelques fois hériter d'un widget de manière à utiliser ses propriétés python sans pour cela utiliser le style défini dans le fichier .kv. Par exemple, nous voudrions hériter d'un label, mais avec nos propres instructions pour le canvas. On peut réaliser cela en mettant un tiret '-' davant le nom de la classe dans le fichier .kv. Nous aimerions quelques fois hériter d'un widget de manière à utiliser ses propriétés python sans pour cela utiliser le style défini dans le fichier .kv. Par exemple, nous voudrions hériter d'un label, mais avec nos propres instructions pour le canvas. On peut réaliser cela en mettant un tiret '-' davant le nom de la classe dans le fichier .kv.
Ligne 354: Ligne 374:
 MyWidget aura a présent ses propres instructions dans son canvas. MyWidget aura a présent ses propres instructions dans son canvas.
  
-==== Les directives de Lang ====+===== Les directives de Lang =====
  
 Vous pouvez utiliser des directives pour contrôler les fichiers du langage (lang). Une directive doit commencer avec un caractère #: Vous pouvez utiliser des directives pour contrôler les fichiers du langage (lang). Une directive doit commencer avec un caractère #:
Ligne 402: Ligne 422:
 </code> </code>
  
-{{tag>kivy}}+=====Définir l'héritage d'un widget===== 
 + 
 +<code python> 
 +from kivy.app import App 
 +from kivy.lang import Builder 
 + 
 +kv = ''' 
 +<LabeledSlider@Slider>: 
 +    step: 1 
 +    Label: 
 +        text: '{}'.format(int(root.value)) 
 +        size: self.texture_size 
 +        top: root.center_y - sp(20) 
 +        center_x: root.value_pos[0] 
 +''' 
 + 
 +class ShortenText(App): 
 +    def build(self): 
 +        return Builder.load_string(kv) 
 + 
 +ShortenText().run() 
 +</code> 
 +équivaut à  
 +<code python> 
 +from kivy.app import App 
 +from kivy.lang import Builder 
 +from kivy.uix.slider import Slider 
 + 
 +kv = ''' 
 +<LabeledSlider>: 
 +    step: 1 
 +    Label: 
 +        text: '{}'.format(int(root.value)) 
 +        size: self.texture_size 
 +        top: root.center_y - sp(20) 
 +        center_x: root.value_pos[0] 
 +''' 
 + 
 +class LabeledSlider(Slider): 
 +    pass 
 + 
 +class ShortenText(App): 
 +    def build(self): 
 +        return Builder.load_string(kv) 
 + 
 +ShortenText().run() 
 +</code> 
 +{{tag> kivy python sb }}
kivy_les_fichiers_kv.1521702694.txt.gz · Dernière modification : 2018/03/22 07:11 de serge