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.
In Version 1.7.0 geändert: Builder führt keine Canvas-Darstellung in Echtzeit durch. Packt alle Ausdrücke, die zuerst ausgeführt werden müssen, sendet die Eingabe und führt sie dann unmittelbar vor dem Zeichnen des Rahmens aus. Wenn Sie das Zeichnen von Zeichenflächen erzwingen möchten, rufen Sie Builder.sync auf. . *
Enthält experimentelle Profiling-Tools für kv lang. Sie können es aktivieren, indem Sie die Umgebungsvariable KIVY_PROFILE_LANG = 1 setzen. Danach wird eine HTML-Datei mit dem Namen builder_stats.html generiert. * *
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.
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.
AnotherClass * wird als untergeordnetes Element der * ClassName * -Instanz erstellt und hinzugefügt.
Einrückung ist wichtig und muss konsistent sein. Das Leerzeichen muss ein Vielfaches des Leerzeichens sein, das für die erste eingerückte Zeile verwendet wird. Das Mischen von Tabulatoren und Leerzeichen wird nicht empfohlen.
Der Wert der Eigenschaft muss (zumindest vorerst) in einer Zeile angegeben werden.
Canvas-Eigenschaften sind etwas Besonderes. Sie können die aktuelle Klasse mit grafischen Anweisungen grafisch darstellen.
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.
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_ \
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.
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')
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 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
Es gibt zwei Dinge, die Sie tun müssen, um Template mit Kivy zu verwenden.
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.
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.
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.
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.
Ä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.
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.
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