Comment utiliser Python Kivy (référence) -J'ai traduit le langage Kivy de la référence API-

Mise à jour du 20/06/2017

Il est apparu dans la traduction du manuel officiel. Après cela, apportez des corrections en utilisant les liens ci-dessous. Le correctif est compatible avec la dernière version 1.10 de kivy.

Une traduction de la référence API de Kivy Kivy Language. [Guide de programmation (traduit) »Langue Kv (traduit)" (https://pyky.github.io/kivy-doc-ja/guide/lang.html) a une explication qui n'est pas décrite, alors essayez de la traduire. J'ai fait.

Kivy Language

 Module: kivy.langAdded in 1.0.0

Kivy Language est un langage dédié à la description des interfaces utilisateur et des interactions. Vous pouvez comparer ce langage avec QML de Qt (http://qt.nokia.com), mais il contient de nouveaux concepts tels que les définitions de règles (un peu comme CSS) et les modèles.

Aperçu

Kivy Language se compose de plusieurs configurations disponibles.

Rule La règle est similaire à la règle CSS. Les règles sont appliquées à un widget particulier (ou à sa classe) dans l'arborescence des widgets et sont modifiées d'une manière particulière. Vous pouvez utiliser des règles pour spécifier un comportement interactif et des règles pour ajouter une représentation graphique du widget que vous souhaitez appliquer. Vous pouvez utiliser l'attribut cls (par exemple cls = MyTestWidget) pour cibler une classe particulière de widget (similaire au concept CSS d'une classe).

Root Widget Vous pouvez utiliser Kivy Language pour créer l'intégralité de l'interface utilisateur. Le fichier kv doit contenir au plus un widget racine.

Dynamic Classes Dynamic Class (introduit dans la version 1.7.0) vous permet de créer rapidement de nouveaux widgets et règles sans déclaration côté fichier Python.

Templates (deprecated) (Introduit dans la version 1.0.5 et obsolète dans la version 1.7.0) Les modèles sont utilisés pour remplir des parties d'une application, telles que le contenu d'une liste de styles (par exemple, icône de gauche, texte de droite). J'ai fait. Déconseillé par classe dynamique.

Syntaxe d'un fichier kv

Les fichiers Kivy Language ont une extension de fichier .kv.

Le contenu du fichier doit toujours commencer par l'en-tête Kivy. La version doit être remplacée par la version de Kivy Language que vous utilisez. Pour 1.0:

#:kivy `1.0`

# content here

Le contenu peut inclure des définitions de règle, des widgets racine, des définitions de classe dynamique et des modèles.

# Syntax of a rule definition. Note that several Rules can share the same
# definition (as in CSS). Note the braces: they are part of the definition.
<Rule1,Rule2>:
    # .. definitions ..

<Rule3>:
    # .. definitions ..

# Syntax for creating a root widget
RootClassName:
    # .. definitions ..

# Syntax for creating a dynamic class
<NewWidget@BaseClass>:
    # .. definitions ..

# Syntax for create a template
[TemplateName@BaseClass1,BaseClass2]:
    # .. definitions ..

Qu'il s'agisse d'une règle, d'un widget racine, d'une classe dynamique ou d'un modèle que vous définissez, votre définition ressemble à ceci:

# With the braces it's a rule. Without them, it's a root widget.
<ClassName>:
    prop1: value1
    prop2: value2

    canvas:
        CanvasInstruction1:
            canvasprop1: value1
        CanvasInstruction2:
            canvasprop2: value2

    AnotherClass:
        prop3: value1

Où * prop1 * et * prop2 * sont des propriétés de * ClassName * et * prop3 * sont des propriétés de * AnotherClass *. Si le widget n'a pas de propriété avec le nom spécifié, une propriété ObjectProperty est automatiquement créée et ajoutée au widget.

Voici un exemple simple de fichier kv contenant un widget racine.

#:kivy 1.0

Button:
    text: 'Hello world'

Les méthodes load_file () et load_string () renvoient le widget racine défini dans le fichier / chaîne kv. Ajoutez également des définitions de classe et de modèle à Factory pour une utilisation ultérieure.

Valeurs d'expression, on_property, ids et mots-clés réservés (expressions de valeur, expressions on_property, identifiants et mots-clés réservés)

Si vous spécifiez une valeur pour une propriété, cette valeur est évaluée en tant qu'expression Python. Cette expression peut être statique ou dynamique. Autrement dit, vous pouvez utiliser des mots clés réservés pour utiliser les valeurs d'autres propriétés.

self Le mot clé self fait référence à "l'instance de widget actuelle":

Button:
    text: 'My state is %s' % self.state

root Ce mot clé ne peut être utilisé que dans les définitions de règle et représente le widget racine de la règle (la première instance de la règle).

<MyWidget>:
    custom: 'Hello world'
    Button:
        text: root.custom

app Ce mot clé fait toujours référence à votre instance d'application. Identique à l'appel de kivy.app.App.get_running_app () en Python.

Label:
    text: app.name

args

Ce mot-clé peut être utilisé dans le rappel on_ \ <action >. Cela fait référence aux arguments passés au rappel.

TextInput:
    on_focus: self.insert_text("Focus" if args[1] else "No focus")

ids

La définition de classe peut inclure un ID qui peut être utilisé comme mot clé.

<MyWidget>:
    Button:
        id: btn1
    Button:
        text: 'The state of the other button is %s' % btn1.state

Notez que cet * id * ne peut pas être utilisé avec une instance de widget. Il est utilisé exclusivement pour les références externes. * id * est une référence faible au widget, pas au widget lui-même. Le widget lui-même est accessible avec l'id .__ self__ (btn1 .__ self__ dans ce cas).

Lorsque le fichier kv est traité, une référence faible à tous les widgets marqués avec * id * est ajoutée au dictionnaire * ids * des widgets racine. En d'autres termes, en suivant l'exemple ci-dessus, vous pouvez accéder à l'état du bouton comme suit:

widget = MyWidget()
state = widget.ids["btn1"].state

# Or, as an alternative syntax,
state = widget.ids.btn1.state

Notez que le widget le plus à l'extérieur applique la kvRule à tous les widgets internes avant que les autres règles ne soient appliquées. Autrement dit, si votre widget interne contient des identifiants, ces identifiants peuvent ne pas être disponibles dans la fonction init de votre widget interne.

Expressons valides

Il y a deux endroits dans le fichier kv pour accepter les instructions python. Après la propriété, le résultat de l'expression (comme le texte du bouton ci-dessous) et après on_property, la propriété est mise à jour (comme on_state).

Dans le premier cas, l'expression ne peut être que sur une seule ligne, les sauts de ligne ne peuvent pas être échappés et étendus à plusieurs lignes et la valeur doit être renvoyée. Des exemples d'expressions valides sont text: self.state et ('up' pour self.state == 'normal' else 'down').

Dans ce dernier cas, plusieurs instructions sur une seule ligne, y compris des instructions sur plusieurs lignes qui échappent aux sauts de ligne, sont valides sauf si vous ajoutez un niveau de retrait.

Voici un exemple de déclaration valide:

on_press: if self.state == 'normal': print('normal')
on_state:
    if self.state == 'normal': print('normal')
    else: print('down')
    if self.state == 'normal': \
    print('multiline normal')
    for i in range(10): print(i)
    print([1,2,3,4,
    5,6,7])

Exemples d'instructions non valides:

on_state:
    if self.state == 'normal':
        print('normal')

Relation entre les valeurs et les propriétés

Avec Kivy Language, vous pouvez voir que le travail se fait automatiquement dans les coulisses. Vous devez savoir que Properties implémente le modèle de conception d'observateur. Autrement dit, vous pouvez lier votre propre fonction pour qu'elle soit appelée lorsque la valeur de la propriété change (c'est-à-dire, observez passivement la propriété pour les changements potentiels).

Kivy Language crée un rappel de création pour détecter les propriétés d'une expression de valeur et mettre à jour automatiquement les propriétés via l'expression lorsque des modifications se produisent.

Voici un exemple simple de ce comportement.

Button:
    text: str(self.state)

Dans cet exemple, l'analyseur détecte que self.state est une valeur dynamique (propriété). La propriété d'état du bouton peut être modifiée à tout moment (lorsque l'utilisateur le touche). Ce bouton doit afficher son propre état sous forme de texte, même si l'état change. Pour ce faire, utilisez la propriété d'état du bouton et utilisez-la pour la valeur de la propriété text du bouton. Cela contrôle le texte affiché sur le bouton (qui convertit également l'état en une représentation sous forme de chaîne). Les propriétés du texte sont automatiquement mises à jour chaque fois que l'état du bouton change.

Souvenez-vous. La valeur est une expression Python! Vous pouvez donc faire des choses intéressantes comme celle-ci:

Button:
    text: 'Plop world' if self.state == 'normal' else 'Release me!'

Le texte du Button change avec l'état du Button. Par défaut, le texte du Button est "Plop world", mais lorsque vous appuyez sur le Button, le texte devient "Release me!".

Plus précisément, l'analyseur Kivy Language trouve toutes les sous-chaînes au format Xab où X est self ou root ou app ou un identifiant connu et a et b sont des propriétés. Ensuite, ajoutez et modifiez les dépendances appropriées. Par exemple, cela fonctionne comme prévu.

<IndexedExample>:
    beta: self.a.b[self.c.d]

Cependant, en raison des restrictions d'analyseur attendues à l'avenir, vous ne pouvez pas:

<BadExample>:
    beta: self.a.b[self.c.d].e.f

La partie .e.f ne suit certainement pas le modèle attendu et n'est pas reconnue car elle n'a pas les dépendances appropriées définies. Au lieu de cela, vous devez introduire une propriété intermédiaire pour autoriser les contraintes suivantes:

<GoodExample>:
    alpha: self.a.b[self.c.d]
    beta: self.alpha.e.f

Instructions graphiques

Les instructions graphiques sont une partie spéciale du langage Kivy. Ils sont gérés par la définition de la propriété 'canvas':

Widget:
    canvas:
        Color:
            rgb: (1, 1, 1)
        Rectangle:
            size: self.size
            pos: self.pos

Toutes les classes ajoutées dans la propriété canvas doivent dériver de la classe Instruction. Vous ne pouvez pas placer la classe Widget dans la propriété canvas (le widget n'a pas de sens car il ne s'agit pas d'une instruction liée aux graphiques).

Si vous souhaitez profiter du thème, la même question que celle du CSS vous sera posée: quelle règle a été exécutée en premier? Dans ce cas, les règles sont exécutées dans l'ordre de traitement (de haut en bas).

Si vous souhaitez modifier la façon dont les boutons sont rendus, vous pouvez créer votre propre fichier kv et l'ajouter comme suit:

<Button>:
    canvas:
        Color:
            rgb: (1, 0, 0)
        Rectangle:
            pos: self.pos
            size: self.size
        Rectangle:
            pos: self.pos
            size: self.texture_size
            texture: self.texture

Cela fera apparaître un bouton avec un fond rouge étiqueté en bas à gauche, en plus de toutes les règles ci-dessus. Vous pouvez utiliser la commande * Effacer * pour effacer toutes les étapes précédentes.

<Button>:
    canvas:
        Clear
        Color:
            rgb: (1, 0, 0)
        Rectangle:
            pos: self.pos
            size: self.size
        Rectangle:
            pos: self.pos
            size: self.texture_size
            texture: self.texture

Seules les règles suivant la commande * Effacer * sont prises en compte

Dynamic classes

La classe Dynamic vous permet de créer rapidement un nouveau widget sans utiliser au préalable une déclaration Python. La syntaxe de la classe dynamique est similaire à la règle, mais vous devez spécifier la classe de base à sous-classe.

La syntaxe est la suivante:

# Simple inheritance
<NewWidget@Button>:
    # kv code here ...

# Multiple inheritance
<NewWidget@ButtonBehavior+Label>:
    # kv code here ...

Le caractère @ est utilisé pour distinguer le nom de la classe de la classe de sous-classification. Combien coûte-t-il en Python.

# Simple inheritance
class NewWidget(Button):
    pass

# Multiple inheritance
class NewWidget(ButtonBehavior, Label):
    pass

Les nouvelles propriétés sont généralement ajoutées dans le code Python et doivent d'abord être déclarées. Si la propriété n'existe pas dans la classe Dynamic, elle sera automatiquement créée en tant que propriété ObjectProperty (antérieure à 1.8.0) ou propriété typée appropriée (à partir de 1.8.0).

Implémentons un bouton d'image de base et expliquons comment utiliser ces classes dynamiques. Il dérive simplement la classe de Button et ajoute la propriété de nom de fichier image.

<ImageButton@Button>:
    source: None

    Image:
        source: root.source
        pos: root.pos
        size: root.size

# let's use the new classes in another rule:
<MainUI>:
    BoxLayout:
        ImageButton:
            source: 'hello.png'
            on_press: root.do_something()
        ImageButton:
            source: 'world.png'
            on_press: root.do_something_else()

En Python, vous pouvez créer une instance d'une classe dynamique comme suit:

from kivy.factory import Factory
button_inst = Factory.ImageButton()

Note Les classes dynamiques permettent aux classes enfants d'être déclarées avant leur classe parent. Cependant, cela conduit à des situations non intuitives où la propriété / méthode parent remplace la propriété / méthode enfant. Soyez prudent si vous choisissez ce comportement.

Templates

Syntaxe des modèles

Il y a deux choses que vous devez faire pour utiliser Template avec Kivy.

  1. Le contexte à passer pour le contexte (qui sera ctx dans le Template).
  2. Définition du modèle kv.

La syntaxe de Template est la suivante.

# With only one base class
[ClassName@BaseClass]:
    # .. definitions ..

# With more than one base class
[ClassName@BaseClass1,BaseClass2]:
    # .. definitions ..

Par exemple, pour une liste, vous devez créer une entrée avec une image à gauche et une étiquette à droite. Vous pouvez créer un modèle pour rendre la définition plus facile à utiliser. Par conséquent, créez un modèle qui utilise deux entrées dans le contexte. Le nom et le titre du fichier image sont les suivants.

 [IconItem@BoxLayout]:
    Image:
        source: ctx.image
    Label:
        text: ctx.title

En Python, vous pouvez instancier un modèle comme suit:

from kivy.lang import Builder

# create a template with hello world + an image
# the context values should be passed as kwargs to the Builder.template
# function
icon1 = Builder.template('IconItem', title='Hello world',
    image='myimage.png')

# create a second template with other information
ctx = {'title': 'Another hello world',
       'image': 'myimage2.png'}
icon2 = Builder.template('IconItem', **ctx)
# and use icon1 and icon2 as other widget.

Exemple de modèle (exemple de modèle)

Dans la plupart des cas, vous utiliserez beaucoup de redéfinition lors de la création d'écrans en kv lang. Cet exemple crée une barre d'outils basée sur BoxLayout et place des widgets Image qui répondent à l'événement on_touch_down.

<MyToolbar>:
    BoxLayout:
        Image:
            source: 'data/text.png'
            size: self.texture_size
            size_hint: None, None
            on_touch_down: self.collide_point(*args[1].pos) and root.create_text()

        Image:
            source: 'data/image.png'
            size: self.texture_size
            size_hint: None, None
            on_touch_down: self.collide_point(*args[1].pos) and root.create_image()

        Image:
            source: 'data/video.png'
            size: self.texture_size
            size_hint: None, None
            on_touch_down: self.collide_point(*args[1].pos) and root.create_video()

Vous pouvez voir que les attributs size et size_hint sont exactement les mêmes. De plus, le rappel et l'image on_touch_down changent. Ce sont les parties variables du modèle qui peuvent être mises en contexte. Créons un modèle d'image:

[ToolbarButton@Image]:

    # This is the same as before
    size: self.texture_size
    size_hint: None, None

    # Now, we are using the ctx for the variable part of the template
    source: 'data/%s.png' % ctx.image
    on_touch_down: self.collide_point(*args[1].pos) and ctx.callback()

Les modèles peuvent être utilisés directement dans MyToolbarRule.

<MyToolbar>:
    BoxLayout:
        ToolbarButton:
            image: 'text'
            callback: root.create_text
        ToolbarButton:
            image: 'image'
            callback: root.create_image
        ToolbarButton:
            image: 'video'
            callback: root.create_video

C'est tout.

Limitations du modèle

Lors de la création d'un contexte, procédez comme suit:

<MyRule>:
    Widget:
        id: mywidget
        value: 'bleh'
    Template:
        ctxkey: mywidget.value # << fail, this references the id
        # mywidget
<MyRule>:
    Template:
        ctxkey: 'value 1' if root.prop1 else 'value2' # << even if
        # root.prop1 is a property, if it changes value, ctxkey
        # will not be updated

Les définitions de modèle ne prennent pas en charge l'héritage car elles remplacent toute la définition portant le même nom.

Redéfinir le style d'un widget

Parfois, vous souhaitez hériter du widget afin d'utiliser les propriétés Python sans utiliser les styles de définition .kv. Par exemple, vous souhaitez hériter de Label, mais vous pouvez définir votre propre instruction de canevas au lieu d'utiliser automatiquement l'instruction de canevas héritée de Label. Cela peut être réalisé en ajoutant un tiret (-) au nom de la classe dans la définition de style .kv.

Dans myapp.py:

class MyWidget(Label):
    pass

Puis dans my.kv:

<-MyWidget>:
    canvas:
        Color:
            rgb: 1, 1, 1
        Rectangle:
            size: (32, 32)

MyWidget a maintenant des instructions de couleur et de rectangle dans le canevas sans utiliser les instructions héritées de Label.

Redéfinir le style de propriété d'un widget

Comme pour la redéfinition des styles, vous souhaiterez peut-être conserver tous les styles définis par KV et les hériter du widget, à l'exception des styles appliqués à certaines propriétés. Par exemple, vous voulez hériter de Button, mais vous pouvez définir votre propre * state_image * au lieu de vous fier aux valeurs de background_normal et background_down. Cela peut être réalisé en ajoutant un tiret (-) au nom de la propriété state_image dans la définition de style .kv.

Dans myapp.py

class MyWidget(Button):

    new_background = StringProperty('my_background.png')

Et dans my.kv

<MyWidget>:
    -state_image: self.new_background

MyWidget a maintenant un arrière-plan state_image défini uniquement avec new_background, et il est possible que state_image n'ait pas été défini dans les styles précédents.

Note L'ancienne règle a été effacée, mais elle sera appliquée lors de la création du widget et sera supprimée lorsque la nouvelle règle avec un tiret sera atteinte. Cela signifie que vous pouvez initialement définir les propriétés à l'aide de l'ancienne règle.

Ordre des kwargs et application des règles KV

Les propriétés peuvent être initialisées dans KV et Python. Par exemple, en KV

<MyRule@Widget>:
    text: 'Hello'
    ramp: 45.
    order: self.x + 10

MyRule () initialise les trois propriétés kivy à la valeur KV spécifiée. En dehors de Python, si la propriété existe déjà en tant que propriété kivy, vous pouvez utiliser une propriété telle que MyRule (* line = 'Bye', side = 55 *).

Mais qu'arrive-t-il à la valeur finale de la propriété lorsque MyRule (* text = 'Bye', order = 55 *) est exécutée? La règle rapide est que l'initialisation Python est plus forte par rapport à certaines règles que l'initialisation KV.

Plus précisément, le kwarg donné à l'initialiseur python est toujours appliqué en premier. Dans l'exemple ci-dessus, le texte est défini sur "Bye" et l'ordre est défini sur "55". Et toutes les règles KV s'appliquent, à l'exception des règles constantes qui remplacent les valeurs fournies par l'initialiseur Python.

Autrement dit, les KVRules qui ne créent pas de liaisons de type texte sont du texte: 'Hello' et rampe: 45. Si la valeur de cette propriété est fournie en Python, cette règle ne s'applique pas.

Ainsi, dans l'exemple MyRule (* text = 'Bye', order = 55 *), le texte est "Bye", la rampe est de 45 et l'ordre de création de la liaison est défini sur 55, mais KVRuleself.x + 10 Cela s'applique à tout.

Directives linguistiques

Les directives vous permettent d'ajouter des commandes déclaratives telles que des importations et des définitions de constantes à votre fichier lang. La directive est ajoutée sous forme de commentaire au format suivant:

#:<directivename> <options>

import

** Ajouté dans la version 1.0.5. **

Comment écrire:

#:import <alias> <package>

Vous pouvez importer le package à décrire.

#:import os os

<Rule>:
    Button:
        text: os.getcwd()

Pour une écriture plus compliquée,

#:import ut kivy.utils

<Rule>:
    canvas:
        Color:
            rgba: ut.get_random_color()

** Ajouté dans 1.0.7. **

Vous pouvez importer des classes directement depuis le module.

#: import Animation kivy.animation.Animation
<Rule>:
    on_prop: Animation(x=.5).start(self)

set

** Ajouté dans 1.0.6. **

Comment écrire

#:set <key> <expr>

Définissez une clé qui peut être utilisée n'importe où dans kv. Par exemple:

#:set my_color (.4, .3, .4)
#:set my_color_hl (.5, .4, .5)

<Rule>:
    state: 'normal'
    canvas:
        Color:
            rgb: my_color if self.state == 'normal' else my_color_hl

include

grammaire:

#:include [force] <file>

Contient des fichiers Kivy externes. Cela vous permet de diviser un widget complexe en fichiers individuels. Lorsque include est forcé, le fichier est d'abord déchargé, puis rechargé. Par exemple:

# Test.kv
#:include mycomponent.kv
#:include force mybutton.kv

<Rule>:
    state: 'normal'
    MyButton:
    MyComponent:
# mycomponent.kv
#:include mybutton.kv

<MyComponent>:
    MyButton:
# mybutton.kv

<MyButton>:
    canvas:
        Color:
            rgb: (1.0, 0.0, 0.0)
        Rectangle:
            pos: self.pos
            size: (self.size[0]/4, self.size[1]/4)

API

class kivy.lang.Observable

Added in 1.9.0

Bases: kivy.event.ObjectWithUid

Observable est une classe stub qui définit les méthodes requises pour la liaison. EventDispatcher est un exemple de classe qui implémente l'interface de liaison. Voir EventDispatcher pour plus d'informations.

fbind()

Added in 1.9.0

Voir EventDispatcher.fbind ().

Note La méthode fbind () a été ajoutée pour maintenir la compatibilité descendante avec les classes dérivées qui peuvent avoir hérité de Observable. L'implémentation par défaut de fbind () consiste à créer une fonction partielle à passer à la liaison tout en préservant uid et largs / kwargs. Cependant, funbind () (et unbind_uid ()) doivent d'abord rechercher cette sous-fonction en utilisant largs / kwargs ou uid, puis appeler unbind () sur la fonction retournée, donc c'est à peu près C'est inefficace. Pour de meilleures performances, nous vous recommandons de remplacer ces méthodes par des classes dérivées pour la liaison directe. Similaire à EventDispatcher.fbind (), cette méthode renvoie 0 en cas d'échec et un uid unique positif en cas de succès. Cet uid peut être utilisé avec unbind_uid ().


## funbind()

Added in 1.9.0

fbind()Et EventDispatcher.funbind()S'il te plait regarde

## unbind_uid()

Added in 1.9.0

fbind()Et EventDispatcher.unbind_uid()S'il te plait regarde.

## class kivy.lang.BuilderBase

Added in 1.0.0

Bases: builtins.object

Le générateur analyse le fichier kv et crée un analyseur pour fusionner les résultats dans des règles internes, des modèles, etc.

Par défaut, le générateur est une instance Kivy globale utilisée par un widget qui peut lire d'autres fichiers kv en plus de celui par défaut.


## apply(widget, ignored_consts=set())

Added in 1.0.0

Recherchez et appliquez toutes les règles qui correspondent à votre widget.

*ignored_consts*Est un type d'ensemble ou de liste qui est un nom de propriété auquel la règle KV constante pour ce widget (c'est-à-dire la règle qui ne crée pas de liaison) ne s'applique pas. Cela évitera, par exemple, les règles constantes qui écrasent les valeurs initialisées en Python.


## apply_rules(widget, rule_name, ignored_consts=set())

Added in 1.9.2

rule_Trouvez toutes les règles qui correspondent au widget de nom et*widget*S'applique à.

*ignored_consts*Est un type d'ensemble ou de liste qui est un nom de propriété auquel la règle KV constante pour ce widget (c'est-à-dire la règle qui ne crée pas de liaison) ne s'applique pas. Cela évitera, par exemple, les règles constantes qui écrasent les valeurs initialisées en Python.


## load_file(filename, **kwargs)

Added in 1.0.0

Insère le fichier dans Language Builder et renvoie le widget racine (s'il est défini) pour le fichier kv.

**paramètre**:
rulesonly: tapez bool, la valeur par défaut est False.
Si True, Builder lève une exception s'il existe un widget racine dans la définition.


** load_string(string, **kwargs)

Added in 1.0.0

Insère la chaîne dans Language Builder et renvoie le widget racine (s'il est défini) pour la chaîne kv.

**paramètre**:
rulesonly: tapez bool, la valeur par défaut est False.
Si True, Builder lève une exception s'il existe un widget racine dans la définition.

** match(widget) Added in 1.0.0

Added in 1.0.0

Match widget*ParserRule*Renvoie une liste d'objets.

** match_rule_name(rule_name)

Added in 1.0.0

Match widget*ParserRule*Renvoie une liste d'objets.

** sync()

Added in 1.7.0

Effectue toutes les opérations d'attente, y compris l'exécution de toutes les expressions liées au canevas.


** template(*args, **ctx)

Added in 1.0.5

Créez un modèle spécial avec un contexte spécifique.

Le modèle vous permet de créer des widgets personnalisés à partir des définitions de kv lang. Vérifiez l'état d'utilisation du modèle.

## unbind_property(widget, name)

Added in 1.9.1

Dissocie le gestionnaire créé par toutes les règles du widget qui définit le nom.

Cela efface efficacement toutes les règles du widget qui prend la forme

**name: rule**

Exemple:

w = Builder.load_string(''' ... Widget: ... height: self.width / 2. if self.disabled else self.width ... x: self.y + 50 ... ''')

w.size [100, 100]

w.pos [50, 0]

w.width = 500 w.size [500, 500]

Builder.unbind_property(w, 'height') w.width = 222 w.size [222, 500]

w.y = 500 w.pos [550, 500]


** unbind_widget(uid)

Added in 1.7.2

Dissocie tous les gestionnaires créés par les règles KV du widget. Kivy parce que Builder l'utilise dans le destructeur du widget.uix.widget.Widget.L'uid est passé ici au lieu du widget lui-même.

Cela efface efficacement toutes les règles KV associées à ce widget.
Un exemple est le suivant.:

w = Builder.load_string(''' ... Widget: ... height: self.width / 2. if self.disabled else self.width ... x: self.y + 50 ... ''')

w.size [100, 100]

w.pos [50, 0]

w.width = 500 w.size [500, 500]

Builder.unbind_widget(w.uid) w.width = 222 w.y = 500 w.size [222, 500]

w.pos [50, 500]


## unload_file(filename)
Décharge toutes les règles associées aux fichiers précédemment importés.

Added in 1.0.8

## Warning
Cela ne supprime pas les règles ou les modèles déjà appliqués ou utilisés dans le widget actuel. Il n'affecte que la création des widgets ou appels aux modèles suivants.

## exception kivy.lang.BuilderException(context, line, message, cause=None)

Added in 1.0.0

Bases: kivy.lang.parser.ParserException

Une exception qui se produit lorsque le générateur ne parvient pas à appliquer une règle à un widget.

## class kivy.lang.Parser(**kwargs)

Added in 1.0.0

Bases: builtins.object

Créez un objet Parser qui analyse les fichiers Kivy Language ou le contenu Kivy.

## parse(content)

Added in 1.0.0

Analyse le contenu du fichier Parser et renvoie une liste d'objets racine.


## parse_level(level, lines, spaces=0)

Added in 1.0.0

Niveau actuel (niveau*Analysez l'indentation de (espace).

## strip_comments(lines) 

Added in 1.0.0

Supprimez les commentaires sur toutes les lignes à la fois. Les commentaires doivent être écrits sur une seule ligne, pas à la fin de la ligne. Le premier caractère non vide de la ligne de commentaire doit être #.

## exception kivy.lang.ParserException(context, line, message, cause=None)   
 
Added in 1.0.0

Bases: Exception

Exception qui se produit lorsque quelque chose ne va pas avec le fichier kv.




Recommended Posts

Comment utiliser Python Kivy (référence) -J'ai traduit le langage Kivy de la référence API-
Comment utiliser Python Kivy ① ~ Bases du langage Kv ~
J'ai essayé de résumer comment utiliser matplotlib de python
Comment utiliser l'API Python d'OpenPose
[Python] Comment utiliser l'API Typetalk
[Python] Résumé de l'utilisation des pandas
[Python2.7] Résumé de l'utilisation d'unittest
Résumé de l'utilisation de la liste Python
[Python2.7] Résumé de l'utilisation du sous-processus
[Question] Comment utiliser plot_surface de python
[Python] Comment utiliser deux types de type ()
Comment utiliser Python Kivy ④ ~ Exécution sur Android ~
Résumé de l'utilisation de MNIST avec Python
[Python] Comment utiliser la liste 2 Référence de la valeur de la liste, nombre d'éléments, valeur maximale, valeur minimale
[BigQuery] Comment utiliser l'API de BigQuery pour Python -Création de table-
[Python] Comment utiliser la liste 1
Comment utiliser Python Argparse
Python: comment utiliser pydub
[Python] Comment utiliser checkio
J'ai essayé de résumer comment utiliser les pandas de python
[Python] Comment utiliser input ()
Comment utiliser Python lambda
[Python] Comment utiliser virtualenv
python3: Comment utiliser la bouteille (3)
python3: Comment utiliser la bouteille
Comment utiliser les octets Python
[Python] Résumé de l'utilisation des fonctions de fractionnement et de jointure
Comparaison de l'utilisation des fonctions d'ordre supérieur dans Python 2 et 3
Je ne savais pas comment utiliser l'instruction [python] for
Python: comment utiliser async avec
Résumé de l'utilisation de pandas.DataFrame.loc
Comment utiliser les requêtes (bibliothèque Python)
Comment utiliser SQLite en Python
Résumé de l'utilisation de pyenv-virtualenv
Comment utiliser lentement le langage informatique 2
[Python] Comment utiliser la liste 3 Ajouté
Comment utiliser Mysql avec python
Comment utiliser ChemSpider en Python
Python: Comment utiliser pydub (lecture)
Comment utiliser PubChem avec Python
Comment utiliser l'API Bing Search
Comment utiliser la fonction zip de python
Comment utiliser lentement le langage informatique
Résumé de l'utilisation de csvkit
Exemple à utiliser après l'authentification OAuth de l'API BOX avec Python
Grammaire de base du système Python3 (comment utiliser les fonctions, la fermeture, la fonction lambda)
Je souhaite utiliser à la fois la clé et la valeur de l'itérateur Python
Python> Compréhension> Cellules> On m'a appris à utiliser la notation à double inclusion / itertools
[Introduction à Python] Comment utiliser la classe en Python?
[Kivy] Comment installer Kivy sur Windows [Python]
[python] Comment utiliser __command__, explication des fonctions
Je veux utiliser jar de python
[Python] Comment utiliser import sys sys.argv
[Python] Organisation de l'utilisation des instructions
Mémorandum sur l'utilisation du python gremlin
python: Comment utiliser les locals () et globals ()
Comment utiliser __slots__ dans la classe Python
Jupyter Notebook Principes d'utilisation
Comment utiliser "deque" pour les données Python
Bases de PyTorch (1) -Comment utiliser Tensor-