Verwendung von Python Kivy (Referenz) -Ich habe die Kivy-Sprache der API-Referenz übersetzt-

Update 2017/06/20

Es erschien in der Übersetzung des offiziellen Handbuchs. Nehmen Sie danach Korrekturen über die folgenden Links vor. Das Update ist mit der neuesten Version 1.10 von kivy kompatibel.

Eine Übersetzung der Kivy-API-Referenz Kivy Language. [Programmieranleitung (übersetzt) »Kv-Sprache (übersetzt)" (https://pyky.github.io/kivy-doc-ja/guide/lang.html) enthält eine Erklärung, die nicht beschrieben wird. Versuchen Sie daher, sie zu übersetzen. Ich tat.

Kivy Language

 Module: kivy.langAdded in 1.0.0

Kivy Language ist eine spezielle Sprache zur Beschreibung von Benutzeroberflächen und Interaktionen. Sie können diese Sprache mit QTs QML (http://qt.nokia.com) vergleichen, sie enthält jedoch neue Konzepte wie Regeldefinitionen (ähnlich wie CSS) und Vorlagen.

Überblick

Kivy Language besteht aus mehreren verfügbaren Konfigurationen.

Rule Die Regel ähnelt der CSS-Regel. Regeln werden auf ein bestimmtes Widget (oder seine Klasse) im Widgetbaum angewendet und auf bestimmte Weise geändert. Sie können Regeln verwenden, um interaktives Verhalten anzugeben, und Regeln, um eine grafische Darstellung des Widgets hinzuzufügen, das Sie anwenden möchten. Sie können das Attribut cls (z. B. cls = MyTestWidget) verwenden, um auf eine bestimmte Klasse von Widgets abzuzielen (ähnlich dem CSS-Konzept einer Klasse).

Root Widget Mit Kivy Language können Sie die gesamte Benutzeroberfläche erstellen. Die kv-Datei sollte höchstens ein Root-Widget enthalten.

Dynamic Classes Mit Dynamic Class (eingeführt in Version 1.7.0) können Sie schnell neue Widgets und Regeln erstellen, ohne die Seite der Python-Datei zu deklarieren.

Templates (deprecated) (Eingeführt in Version 1.0.5 und veraltet in Version 1.7.0.) Vorlagen werden zum Füllen von Teilen einer Anwendung verwendet, z. B. zum Stylen von Listeninhalten (z. B. linkes Symbol, rechter Text). Ich tat. Veraltet von Dynamic Class.

Syntax einer kv-Datei

Kivy Language-Dateien haben die Dateierweiterung .kv.

Der Inhalt der Datei sollte immer mit dem Kivy-Header beginnen. Die Version sollte durch die von Ihnen verwendete Version von Kivy Language ersetzt werden. Für 1.0:

#:kivy `1.0`

# content here

Der Inhalt kann Regeldefinitionen, Root-Widgets, dynamische Klassendefinitionen und Vorlagen enthalten.

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

Unabhängig davon, ob es sich um eine Regel, ein Root-Widget, eine dynamische Klasse oder eine Vorlage handelt, die Sie definieren, sieht Ihre Definition folgendermaßen aus:

# 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

Wobei * prop1 * und * prop2 * Eigenschaften von * ClassName * und * prop3 * Eigenschaften von * AnotherClass * sind. Wenn das Widget keine Eigenschaft mit dem angegebenen Namen hat, wird automatisch eine ObjectProperty erstellt und dem Widget hinzugefügt.

Unten finden Sie ein einfaches Beispiel für eine kv-Datei, die ein Root-Widget enthält.

#:kivy 1.0

Button:
    text: 'Hello world'

Sowohl die Methoden load_file () als auch load_string () geben das in der kv-Datei / Zeichenfolge definierte Root-Widget zurück. Fügen Sie Factory außerdem Klassen- und Vorlagendefinitionen zur späteren Verwendung hinzu.

Ausdruckswerte, on_property, IDs und reservierte Schlüsselwörter (Wertausdrücke, on_property-Ausdrücke, IDs und reservierte Schlüsselwörter)

Wenn Sie einen Wert für eine Eigenschaft angeben, wird dieser Wert als Python-Ausdruck ausgewertet. Dieser Ausdruck kann statisch oder dynamisch sein. Das heißt, Sie können reservierte Schlüsselwörter verwenden, um die Werte anderer Eigenschaften zu verwenden.

self Das Schlüsselwort self bezieht sich auf "aktuelle Widget-Instanz":

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

root Dieses Schlüsselwort kann nur in Regeldefinitionen verwendet werden und repräsentiert das Stamm-Widget der Regel (die erste Instanz der Regel).

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

app Dieses Schlüsselwort bezieht sich immer auf Ihre App-Instanz. Entspricht dem Aufruf von kivy.app.App.get_running_app () in Python.

Label:
    text: app.name

args

Dieses Schlüsselwort kann im Rückruf on_ \ verwendet werden. Dies bezieht sich auf die an den Rückruf übergebenen Argumente.

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

ids

Die Klassendefinition kann eine ID enthalten, die als Schlüsselwort verwendet werden kann.

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

Beachten Sie, dass diese * ID * nicht mit einer Widget-Instanz verwendet werden kann. Es wird ausschließlich für externe Referenzen verwendet. * id * ist ein schwacher Verweis auf das Widget, nicht auf das Widget selbst. Auf das Widget selbst kann mit der ID .__ self__ (in diesem Fall btn1 .__ self__) zugegriffen werden.

Wenn die kv-Datei verarbeitet wird, wird dem * ids * -Wörterbuch der Root-Widgets ein schwacher Verweis auf alle mit * id * gekennzeichneten Widgets hinzugefügt. Mit anderen Worten, gemäß dem obigen Beispiel können Sie wie folgt auf den Schaltflächenstatus zugreifen:

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

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

Beachten Sie, dass das äußerste Widget die kvRule auf alle internen Widgets anwendet, bevor die anderen Regeln angewendet werden. Wenn Ihr internes Widget IDs enthält, sind diese IDs möglicherweise nicht in der Funktion init Ihres internen Widgets verfügbar.

Gültige Expressons

In der kv-Datei gibt es zwei Stellen, an denen Python-Anweisungen akzeptiert werden können. Nach der Eigenschaft wird das Ergebnis des Ausdrucks (z. B. der Schaltflächentext unten) und nach on_property die Eigenschaft aktualisiert (z. B. on_state).

Im ersteren Fall darf sich der Ausdruck nur in einer Zeile befinden, die Zeilenumbrüche können nicht maskiert und auf mehrere Zeilen erweitert werden, und der Wert muss zurückgegeben werden. Beispiele für gültige Ausdrücke sind Text: self.state und ('up' für self.state == 'normal' else 'down').

Im letzteren Fall sind mehrere einzeilige Anweisungen gültig, einschließlich mehrzeiliger Anweisungen, die Zeilenumbrüchen entgehen, sofern Sie keine Einrückungsstufe hinzufügen.

Hier ist ein Beispiel für eine gültige Aussage:

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])

Beispiele für ungültige Aussagen:

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

Beziehung zwischen Werten und Eigenschaften

Mit Kivy Language können Sie sehen, dass die Arbeit automatisch hinter den Kulissen erledigt wird. Sie sollten wissen, dass Properties das Observer Design Pattern implementiert. Das heißt, Sie können Ihre eigene Funktion binden, die aufgerufen werden soll, wenn sich der Wert der Eigenschaft ändert (dh die Eigenschaft passiv auf mögliche Änderungen beobachten).

Kivy Language erstellt einen Rückruf zum Erstellen, um die Eigenschaften eines Wertausdrucks zu erkennen und die Eigenschaften automatisch über den Ausdruck zu aktualisieren, wenn Änderungen auftreten.

Das Folgende ist ein einfaches Beispiel für dieses Verhalten.

Button:
    text: str(self.state)

In diesem Beispiel erkennt der Parser, dass self.state ein dynamischer Wert (Eigenschaft) ist. Die Statuseigenschaft der Schaltfläche kann jederzeit geändert werden (wenn der Benutzer sie berührt). Diese Schaltfläche sollte ihren eigenen Status als Text anzeigen, auch wenn sich der Status ändert. Verwenden Sie dazu die state-Eigenschaft der Schaltfläche und den Wert der Texteigenschaft der Schaltfläche. Dies steuert den auf der Schaltfläche angezeigten Text (der auch den Status in eine Zeichenfolgendarstellung konvertiert). Die Texteigenschaften werden bei jeder Änderung des Schaltflächenstatus automatisch aktualisiert.

Bitte denk daran. Der Wert ist ein Python-Ausdruck! Sie können also einige interessante Dinge wie diese tun:

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

Der Text der Schaltfläche ändert sich mit dem Status der Schaltfläche. Standardmäßig lautet der Text der Schaltfläche "Plop world". Wenn Sie jedoch die Schaltfläche drücken, ändert sich der Text in "Release me!".

Genauer gesagt findet der Kivy Language-Parser alle Teilzeichenfolgen im Xab-Format, wobei X self oder root oder app oder eine bekannte ID ist und a und b Eigenschaften sind. Fügen Sie dann die entsprechenden Abhängigkeiten hinzu und ändern Sie sie. Dies funktioniert beispielsweise wie erwartet.

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

Aufgrund der erwarteten Parser-Einschränkungen in der Zukunft können Sie jedoch nicht:

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

Sicherlich folgt der .e.f-Teil nicht dem erwarteten Muster und wird nicht erkannt, da die richtigen Abhängigkeiten nicht festgelegt sind. Stattdessen müssen Sie eine Zwischeneigenschaft einführen, um die folgenden Einschränkungen zuzulassen:

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

Grafische Anleitung

Grafische Anweisungen sind ein besonderer Bestandteil der Kivy-Sprache. Sie werden von der Eigenschaftsdefinition 'canvas' behandelt:

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

Alle innerhalb der Canvas-Eigenschaft hinzugefügten Klassen müssen von der Instruction-Klasse abgeleitet sein. Sie können die Widget-Klasse nicht in die Canvas-Eigenschaft einfügen (Widget ist nicht sinnvoll, da es sich nicht um eine grafikbezogene Anweisung handelt).

Wenn Sie das Thema nutzen möchten, wird Ihnen dieselbe Frage wie bei CSS gestellt: Welche Regel wurde zuerst ausgeführt? In diesem Fall werden Regeln in Verarbeitungsreihenfolge (von oben nach unten) ausgeführt.

Wenn Sie die Art und Weise ändern möchten, wie Schaltflächen gerendert werden, können Sie Ihre eigene kv-Datei erstellen und wie folgt hinzufügen:

<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

Daraufhin wird zusätzlich zu allen oben genannten Regeln eine Schaltfläche mit einem roten Hintergrund unten links angezeigt. Mit dem Befehl * Löschen * können Sie alle vorherigen Schritte löschen.

<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

Es werden nur Regeln berücksichtigt, die dem Befehl * Löschen * folgen

Dynamic classes

Mit der Dynamic-Klasse können Sie schnell ein neues Widget erstellen, ohne zuvor eine Python-Deklaration zu verwenden. Die Syntax der Dynamic-Klasse ähnelt der von Rule, Sie müssen jedoch die Basisklasse für die Unterklasse angeben.

Die Syntax lautet wie folgt:

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

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

Das @ -Zeichen wird verwendet, um den Klassennamen von der Unterklassenklasse zu unterscheiden. Wie viel kostet es in Python?

# Simple inheritance
class NewWidget(Button):
    pass

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

Neue Eigenschaften werden normalerweise im Python-Code hinzugefügt und müssen zuerst deklariert werden. Wenn die Eigenschaft in der Dynamic-Klasse nicht vorhanden ist, wird sie automatisch als ObjectProperty (vor 1.8.0) oder als geeignete typisierte Eigenschaft (ab 1.8.0) erstellt.

Lassen Sie uns eine grundlegende Bildschaltfläche implementieren und erklären, wie diese dynamischen Klassen verwendet werden. Es leitet die Klasse nur von Button ab und fügt die Eigenschaft für den Namen der Bilddatei hinzu.

<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()

In Python können Sie eine Instanz einer dynamischen Klasse wie folgt erstellen:

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

Note Mit dynamischen Klassen können untergeordnete Klassen vor ihrer übergeordneten Klasse deklariert werden. Dies führt jedoch zu nicht intuitiven Situationen, in denen die übergeordnete Eigenschaft / Methode die untergeordnete Eigenschaft / Methode überschreibt. Seien Sie vorsichtig, wenn Sie dieses Verhalten wählen.

Templates

Syntax von Vorlagen

Es gibt zwei Dinge, die Sie tun müssen, um Template mit Kivy zu verwenden.

  1. Der Kontext, der für den Kontext übergeben werden soll (der in der Vorlage als ctx angegeben wird).
  2. Vorlage kv Definition.

Die Syntax von Template lautet wie folgt.

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

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

Für eine Liste müssen Sie beispielsweise einen Eintrag mit einem Bild links und einer Beschriftung rechts erstellen. Sie können eine Vorlage erstellen, um die Verwendung der Definition zu vereinfachen. Erstellen Sie daher eine Vorlage, die zwei Einträge im Kontext verwendet. Der Name und der Titel der Bilddatei lauten wie folgt.

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

In Python können Sie eine Vorlage wie folgt instanziieren:

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.

Vorlagenbeispiel (Vorlagenbeispiel)

In den meisten Fällen werden Sie beim Erstellen von Bildschirmen in kv lang viel Neudefinition verwenden. In diesem Beispiel erstellen wir eine Symbolleiste basierend auf BoxLayout und platzieren einige Bild-Widgets, die auf das Ereignis on_touch_down reagieren.

<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()

Sie können sehen, dass die Attribute size und size_hint genau gleich sind. Darüber hinaus ändern sich der Rückruf on_touch_down und das Image. Dies sind die variablen Teile der Vorlage, die in einen Kontext gestellt werden können. Erstellen wir eine Bildvorlage:

[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()

Vorlagen können direkt in MyToolbarRule verwendet werden.

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

Das ist alles.

Vorlagenbeschränkungen

Gehen Sie beim Erstellen eines Kontexts wie folgt vor:

<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

Vorlagendefinitionen unterstützen keine Vererbung, da sie die gesamte ähnlich benannte Definition ersetzen.

Neudefinition des Stils eines Widgets

Manchmal möchten Sie vom Widget erben, um Python-Eigenschaften ohne den .kv-Definitionsstil zu verwenden. Sie möchten beispielsweise von Label erben, können jedoch Ihre eigene Canvas-Anweisung definieren, anstatt automatisch die von Label geerbte Canvas-Anweisung zu verwenden. Dies kann erreicht werden, indem dem Klassennamen in der .kv-Stildefinition ein Bindestrich (-) vorangestellt wird.

In myapp.py:

class MyWidget(Label):
    pass

Dann in my.kv:

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

MyWidget enthält jetzt Anweisungen für Farbe und Rechteck im Arbeitsbereich, ohne die von Label geerbten Anweisungen zu verwenden.

Neudefinition des Eigenschaftsstils eines Widgets

Ähnlich wie beim Neudefinieren von Stilen möchten Sie möglicherweise alle von KV definierten Stile beibehalten und vom Widget erben, mit Ausnahme der Stile, die auf bestimmte Eigenschaften angewendet werden. Sie möchten beispielsweise von Button erben, können jedoch Ihr eigenes * state_image * festlegen, anstatt sich auf die Werte background_normal und background_down zu verlassen. Dies kann erreicht werden, indem dem Eigenschaftsnamen state_image in der Definition des .kv-Stils ein Bindestrich (-) vorangestellt wird.

In myapp.py

class MyWidget(Button):

    new_background = StringProperty('my_background.png')

Und in my.kv.

<MyWidget>:
    -state_image: self.new_background

MyWidget hat jetzt einen state_image-Hintergrund, der nur mit new_background festgelegt wurde, und es ist möglich, dass state_image in früheren Stilen nicht festgelegt wurde.

Note Die alte Regel wurde gelöscht, wird jedoch bei der Erstellung des Widgets angewendet und entfernt, wenn eine neue Regel mit einem Bindestrich erreicht wird. Dies bedeutet, dass Sie die Eigenschaften zunächst mit der alten Regel festlegen können.

Reihenfolge der Warnungen und Anwendung der KV-Regeln

Eigenschaften können in KV und Python initialisiert werden. Zum Beispiel in KV

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

MyRule () initialisiert alle drei Kivy-Eigenschaften auf den angegebenen KV-Wert. Abgesehen von Python können Sie eine Eigenschaft wie MyRule verwenden, wenn die Eigenschaft bereits als Kivy-Eigenschaft vorhanden ist (* line = 'Bye', side = 55 *).

Aber was passiert mit dem Endwert der Eigenschaft, wenn MyRule (* text = 'Bye', order = 55 *) ausgeführt wird? Die schnelle Regel lautet, dass die Python-Initialisierung gegenüber bestimmten Regeln stärker ist als die KV-Initialisierung.

Insbesondere wird das dem Python-Initialisierer gegebene kwarg immer zuerst angewendet. Im obigen Beispiel wird der Text auf "Bye" und die Reihenfolge auf "55" gesetzt. Es gelten alle KV-Regeln mit Ausnahme der konstanten Regeln, die die vom Python-Initialisierer bereitgestellten Werte überschreiben.

Das heißt, die KVRules, die keine textähnlichen Bindungen erstellen, sind Text: 'Hallo' und Rampe: 45. Wenn der Wert dieser Eigenschaft in Python angegeben wird, gilt diese Regel nicht.

Im Beispiel von MyRule (* text = 'Bye', order = 55 *) lautet der Text "Bye", die Rampe ist 45 und die Reihenfolge zum Erstellen der Bindung ist auf 55 festgelegt, KVRuleself.x + 10 jedoch Es gilt für alles.

Sprachrichtlinien

Mit Direktiven können Sie Ihrer Lang-Datei deklarative Befehle wie Importe und Konstantendefinitionen hinzufügen. Die Direktive wird als Kommentar im folgenden Format hinzugefügt:

#:<directivename> <options>

import

** Hinzugefügt in 1.0.5. **

Wie schreibt man:

#:import <alias> <package>

Sie können das zu beschreibende Paket importieren.

#:import os os

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

Für komplizierteres Schreiben

#:import ut kivy.utils

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

** Hinzugefügt in 1.0.7. **

Sie können Klassen direkt aus dem Modul importieren.

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

set

** Hinzugefügt in 1.0.6. **

Wie schreibt man

#:set <key> <expr>

Stellen Sie einen Schlüssel ein, der überall in kv verwendet werden kann. Zum Beispiel:

#: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

Grammatik:

#:include [force] <file>

Enthält externe Kivy-Dateien. Auf diese Weise können Sie ein komplexes Widget in einzelne Dateien aufteilen. Wenn include erzwungen wird, wird die Datei zuerst entladen und dann neu geladen. Zum Beispiel:

# 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 ist eine Stub-Klasse, die die für die Bindung erforderlichen Methoden definiert. EventDispatcher ist ein Beispiel für eine Klasse, die die Bindungsschnittstelle implementiert. Weitere Informationen finden Sie unter EventDispatcher.

fbind()

Added in 1.9.0

Siehe EventDispatcher.fbind ().

Note Die Methode fbind () wurde hinzugefügt, um die Abwärtskompatibilität mit abgeleiteten Klassen zu gewährleisten, die möglicherweise von Observable geerbt wurden. Die Standardimplementierung von fbind () besteht darin, eine Teilfunktion zu erstellen, die an die Bindung übergeben werden soll, während uid und largs / kwargs beibehalten werden. Funbind () (und unbind_uid ()) müssen diese Unterfunktion jedoch zuerst mit largs / kwargs oder uid nachschlagen und dann unbind () für die zurückgegebene Funktion aufrufen Es ist ineffizient. Für eine bessere Leistung empfehlen wir, diese Methoden mit abgeleiteten Klassen für die direkte Bindung zu überschreiben. Ähnlich wie bei EventDispatcher.fbind () gibt diese Methode bei einem Fehler 0 und bei Erfolg eine positive eindeutige UID zurück. Diese UID kann mit unbind_uid () verwendet werden.


## funbind()

Added in 1.9.0

fbind()Und EventDispatcher.funbind()Bitte sehen Sie

## unbind_uid()

Added in 1.9.0

fbind()Und EventDispatcher.unbind_uid()Bitte sehen Sie.

## class kivy.lang.BuilderBase

Added in 1.0.0

Bases: builtins.object

Der Builder analysiert die kv-Datei und erstellt einen Parser, um die Ergebnisse in internen Regeln, Vorlagen usw. zusammenzuführen.

Standardmäßig ist der Builder eine globale Kivy-Instanz, die vom Widget verwendet wird und neben der Standarddatei auch andere KV-Dateien lesen kann.


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

Added in 1.0.0

Suchen und wenden Sie alle Regeln an, die Ihrem Widget entsprechen.

*ignored_consts*Ist ein Satz- oder Listentyp, der ein Eigenschaftsname ist, für den die konstante KV-Regel für dieses Widget (dh die Regel, die keine Bindung erstellt) nicht gilt. Dadurch werden beispielsweise konstante Regeln übersprungen, die in Python initialisierte Werte überschreiben.


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

Added in 1.9.2

rule_Finden Sie alle Regeln, die dem Namens-Widget und entsprechen*widget*Gilt für.

*ignored_consts*Ist ein Satz- oder Listentyp, der ein Eigenschaftsname ist, für den die konstante KV-Regel für dieses Widget (dh die Regel, die keine Bindung erstellt) nicht gilt. Dadurch werden beispielsweise konstante Regeln übersprungen, die in Python initialisierte Werte überschreiben.


## load_file(filename, **kwargs)

Added in 1.0.0

Fügt die Datei in Language Builder ein und gibt das Root-Widget (falls definiert) für die kv-Datei zurück.

**Parameter**:
Nur Regeln: Typ Bool, Standard ist False.
Wenn True, löst Builder eine Ausnahme aus, wenn die Definition ein Root-Widget enthält.


** load_string(string, **kwargs)

Added in 1.0.0

Fügt die Zeichenfolge in Language Builder ein und gibt das Root-Widget (falls definiert) für die kv-Zeichenfolge zurück.

**Parameter**:
Nur Regeln: Typ Bool, Standard ist False.
Wenn True, löst Builder eine Ausnahme aus, wenn die Definition ein Root-Widget enthält.

** match(widget) Added in 1.0.0

Added in 1.0.0

Widget abgleichen*ParserRule*Gibt eine Liste von Objekten zurück.

** match_rule_name(rule_name)

Added in 1.0.0

Widget abgleichen*ParserRule*Gibt eine Liste von Objekten zurück.

** sync()

Added in 1.7.0

Führt alle Wartevorgänge aus, einschließlich der Ausführung aller Canvas-bezogenen Ausdrücke.


** template(*args, **ctx)

Added in 1.0.5

Erstellen Sie eine spezielle Vorlage mit einem bestimmten Kontext.

Mit der Vorlage können Sie benutzerdefinierte Widgets aus kv lang-Definitionen erstellen. Überprüfen Sie den Nutzungsstatus der Vorlage.

## unbind_property(widget, name)

Added in 1.9.1

Hebt die Bindung des Handlers auf, der durch alle Regeln des Widgets erstellt wurde, das den Namen festlegt.

Dadurch werden alle Regeln des Widgets, das die Form annimmt, effektiv gelöscht

**name: rule**

Beispiel:

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

Entbindet alle Handler, die mit den KV-Regeln des Widgets erstellt wurden. Kivy, weil Builder es im Destruktor des Widgets verwendet.uix.widget.Widget.Die UID wird hier anstelle des Widgets selbst übergeben.

Dadurch werden alle mit diesem Widget verknüpften KV-Regeln effektiv gelöscht.
Ein Beispiel ist wie folgt.:

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)
Entlädt alle Regeln, die zuvor importierten Dateien zugeordnet sind.

Added in 1.0.8

## Warning
Dadurch werden keine Regeln oder Vorlagen entfernt, die bereits im aktuellen Widget angewendet oder verwendet werden. Dies betrifft nur die Erstellung der folgenden Widgets oder Aufrufe von Vorlagen.

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

Added in 1.0.0

Bases: kivy.lang.parser.ParserException

Die Ausnahme, die auftritt, wenn der Builder die Regel nicht auf das Widget anwendet.

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

Added in 1.0.0

Bases: builtins.object

Erstellen Sie ein Parser-Objekt, das Kivy-Sprachdateien oder Kivy-Inhalte analysiert.

## parse(content)

Added in 1.0.0

Analysiert den Inhalt der Parser-Datei und gibt eine Liste der Stammobjekte zurück.


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

Added in 1.0.0

Aktuelle Ebene (Ebene*Analysieren Sie die Einrückung von (Leerzeichen).

## strip_comments(lines) 

Added in 1.0.0

Löschen Sie Kommentare in allen Zeilen gleichzeitig. Kommentare sollten in einer einzelnen Zeile und nicht am Ende der Zeile stehen. Das erste nicht leere Zeichen in der Kommentarzeile muss # sein.

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

Bases: Exception

Ausnahme, die auftritt, wenn mit der kv-Datei ein Fehler auftritt.




Recommended Posts

Verwendung von Python Kivy (Referenz) -Ich habe die Kivy-Sprache der API-Referenz übersetzt-
Verwendung von Python Kivy ~ ~ Grundlagen der Kv-Sprache ~
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Verwendung der Python-API von OpenPose
[Python] Verwendung der Typetalk-API
[Python] Zusammenfassung der Verwendung von Pandas
[Python2.7] Zusammenfassung der Verwendung von unittest
Zusammenfassung der Verwendung der Python-Liste
[Python2.7] Zusammenfassung der Verwendung des Unterprozesses
[Frage] Wie verwende ich plot_surface von Python?
[Python] Verwendung von zwei Arten von type ()
Verwendung von Python Kivy ④ ~ Ausführung unter Android ~
Zusammenfassung der Verwendung von MNIST mit Python
[Python] Verwendung von Liste 2 Referenz des Listenwerts, der Anzahl der Elemente, des Maximalwerts und des Minimalwerts
[BigQuery] Verwendung der BigQuery-API für die Python-Tabellenerstellung-
[Python] Verwendung von Liste 1
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
Ich habe versucht zusammenzufassen, wie man Pandas von Python benutzt
[Python] Verwendung von input ()
Wie benutzt man Python Lambda?
[Python] Verwendung von virtualenv
python3: Verwendung der Flasche (3)
python3: Wie man eine Flasche benutzt
Verwendung von Python-Bytes
[Python] Zusammenfassung der Verwendung von Split- und Join-Funktionen
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
Ich wusste nicht, wie ich die [Python] für die Anweisung verwenden sollte
Python: So verwenden Sie Async mit
Zusammenfassung der Verwendung von pandas.DataFrame.loc
Verwendung von Anfragen (Python Library)
Verwendung von SQLite in Python
Zusammenfassung der Verwendung von pyenv-virtualenv
Langsame Verwendung der Computersprache 2
[Python] Verwendung von Liste 3 Hinzugefügt
Wie man MySQL mit Python benutzt
Verwendung von ChemSpider in Python
Python: Verwendung von pydub (Wiedergabe)
Verwendung von PubChem mit Python
Wie benutzt man Bing Search API?
Verwendung der Zip-Funktion von Python
Wie man die Computersprache langsam benutzt
Zusammenfassung der Verwendung von csvkit
Beispiel zur Verwendung nach OAuth-Authentifizierung der BOX-API mit Python
Grundlegende Grammatik des Python3-Systems (Verwendung von Funktionen, Schließung, Lambda-Funktion)
Ich möchte sowohl den Schlüssel als auch den Wert des Python-Iterators verwenden
Python> Verständnis> Zellen> Mir wurde beigebracht, wie man Double Inclusion Notation / itertools verwendet
[Einführung in Python] Wie verwende ich eine Klasse in Python?
[Kivy] So installieren Sie Kivy unter Windows [Python]
[Python] Verwendung von __command__, Funktionserklärung
Ich möchte ein Glas aus Python verwenden
[Python] Verwendung von import sys sys.argv
[Python] Organisieren der Verwendung für Anweisungen
Memorandum über die Verwendung von Gremlin Python
Python: Verwendung von Einheimischen () und Globalen ()
Verwendung von __slots__ in der Python-Klasse
Jupyter Notebook Grundlagen der Verwendung
Verwendung von "deque" für Python-Daten
Grundlagen von PyTorch (1) - Verwendung von Tensor-