Verwendung von Python Kivy ~ ~ Grundlagen der Kv-Sprache ~

Zusammenfassung

Kivy (https://kivy.org/#home) erstellt eine GUI-Bibliothek für Python, die in Japan jedoch nicht sehr bekannt ist. Der häufigste Grund ist, dass es gut ist, es zu installieren, aber es gibt nicht viele Informationen auf Japanisch, und ich höre oft Leute sagen, dass sie nicht wissen, wie man es benutzt. Wenn Sie ein Layout in Kivy schreiben, können Sie ein Layout mit einer Kivy-Originalsprache erstellen, die CSS ähnelt und Kv Language heißt, getrennt von der von Python eingegebenen Code. Es dauert jedoch einige Zeit, bis Sie sich daran gewöhnt haben, da nur wenige Informationen vorhanden sind. .. Hier stellen wir ein einfaches Programm vor, das Kv Language verwendet, und stellen die grundlegende Verwendung von Kv Language vor.

Über das diesmal zu erstellende Programm

Das diesmal zu erstellende Programm lautet wie folgt.

result.jpg

Der linke Bildrand ist der Zustand unmittelbar nach dem Start. Der zugrunde liegende "Morgen" bzw. "Mittag" wird durch Klicken auf die Schaltfläche "Nacht", "Guten Morgen", "Hallo" angezeigt. Das Zeichen "Guten Abend" wird angezeigt. Der Inhalt ist eine Einführung in das Layout in Kv-Sprache und die Ausführung der Funktion beim Klicken auf die Schaltfläche.

Referenzmaterial

Obwohl es sich um ein Dokument handelt, reicht der Inhalt von "Kivy Basics" bis "Kv Language" aus dem Programmierhandbuch des offiziellen Kivy-Handbuchs (https://kivy.org/docs/). Da es jedoch in Englisch verfasst und schwer zu verstehen ist, zitiere ich das inoffizielle *, das von Freiwilligen ins Japanische übersetzt wurde (https://pyky.github.io/kivy-doc-ja/).

Nachtrag: Ich habe "Kv Language" der API-Referenz übersetzt, daher wird empfohlen, dies ebenfalls zu lesen.

Ich habe den Code erklärt, als ich die Bühne bei Pycon JP 2017 betrat. Dies ist eine allgemeine Erklärung von Kivy, daher ist sie eine gute Referenz für das, was Sie mit Kivy tun können.

Hinzugefügt im Dezember 2017: Ich werde einen sehr guten Einführungsartikel auf Japanisch vorstellen. Es ist eine gute Idee, es einmal zu lesen, wenn Sie Kivy starten.

Hinzugefügt im Oktober 2018: Es gab eine Person, die mit Kivy eine App erstellt hat, also werde ich sie vorstellen

Einführung in den Prozess und den Quellcode der Erstellung einer Desktop-App für die Dateiauswahl über ein halbes Jahr. Da es auch mit RecycleView implementiert wird, denke ich, dass es eine Referenz dafür sein wird, welche Art von Anwendung mit Kivy ausgeführt werden kann. Ich empfehle Ihnen daher, es zu lesen.

Über das Programm

Es gibt verschiedene Möglichkeiten, Code mit Kivy zu schreiben. Dies ist nur ein Beispiel. Außerdem ist der beim Schreiben dieses Artikels verwendete Quellcode auf Github aufgeführt. Materialien wie Schriftarten und Bilder werden jedoch nicht platziert. Bereiten Sie sie daher vor und platzieren Sie sie gegebenenfalls selbst.

Überprüfungsumgebung

Die Überprüfungsumgebung ist wie folgt.

Über den Editor

Es gibt eine Erweiterung für die Kv-Sprache im Visual Studio-Code.

https://marketplace.visualstudio.com/items?itemName=BattleBas.kivy-vscode

Liste der Verwendung von Python Kivy

Ich poste Folgendes als Fortsetzung. Es wird sein, wie man einen tatsächlichen Antrag stellt.

Aktuelle Erklärung

Unten werde ich den Code und die Ergebnisse veröffentlichen.

1. 1. Zeigen Sie einen leeren Bildschirm

Ausführungsergebnis

WS000000.JPG

Code

main.py


#-*- coding: utf-8 -*-

from kivy.app import App

App().run()

Kv-Datei

Diesmal nicht verwendet

Kommentar

Den grundlegenden Mechanismus von Kivy finden Sie in [Programmierhandbuch (übersetzt) »Kivy Basics (übersetzt)" (https://pyky.github.io/kivy-doc-ja/guide/basic.html). ..

Hier ist die App-Klasse die Basisklasse zum Erstellen von Kivy-Apps. Die grundlegende Verwendung besteht darin, beim Erstellen einer eigenen App daran zu denken, die App-Klasse zu erben, eine Unterklasse zu erstellen und ihre Beschriftungen, Schaltflächen usw. hinzuzufügen.

2. Anzeigen von Apps und Labels

Ausführungsergebnis

out.jpg

Code

main.py


#-*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.label import Label

class TestApp(App):
    def build(self):
        return Label(text='Hello World')

TestApp().run()

Kv-Datei

Diesmal nicht verwendet

Kommentar

Ich habe die TestApp-Klasse erstellt, indem ich die App-Klasse geerbt habe. Darüber hinaus wird die Erstellungsfunktion ausgeführt, um Label () zum Zeitpunkt der Erstellung zurückzugeben. Bei der Ausführung wird auf dem gesamten Bildschirm eine Beschriftung mit den Zeichen "Hallo Welt" in der Mitte des Bildschirms erstellt. Label () ist eines der Widgets von Kivy (Komponentenelemente, aus denen die grafische Benutzeroberfläche und ihre Sammlung bestehen). Kivy erstellt eine grafische Benutzeroberfläche, indem Widgets wie Teile und Layouts kombiniert werden.

Außerdem wird "Test" im Titel oben rechts im Fenster angezeigt. In kivy ist der Titel der Name der Unterklasse, die die App-Klasse vor der App erbt. (Beispiel: TestApp → Test wird angezeigt)

Weitere Informationen finden Sie in der API-Referenz.

3. 3. App- und Etikettenanzeige (mit Kv-Sprache)

Ausführungsergebnis

WS000002.JPG

Code

main.py


#-*- coding: utf-8 -*-
from kivy.app import App

class TestApp(App):
    pass

if __name__ == '__main__':
	TestApp().run()

Kv-Datei

test.kv


Label:  # add comment
    text: "Hello World"

Kommentar

Der Unterschied zu 2 besteht darin, dass die Seite main.py nur die Unterklasse TestApp erstellt hat und intern nichts unternommen wird. Stattdessen erstelle ich eine neue Kv-Datei (Kivy language) mit dem Namen test.kv. Obwohl es sich um eine Kv-Datei handelt, entspricht der Titel in Kivy demselben ** Dateinamen mit einem niedrigeren Anfang ** unter den Namen der Unterklassen, die die App-Klasse wie vor der App erben. Hier lautet der Name der Unterklasse TestApp, daher entspricht test.kv.

Obwohl es sich um eine Kivy-Sprache handelt, weist sie die folgenden Funktionen auf.

Diesmal in test.kv.

Label:  # add comment
    text: "Hello World"

Das Deklarieren entspricht dem Ausführen von (Label (text = 'Hello World')) mit "Hello world", das im Textargument der Funktion Label () in der Python-Datei angegeben ist.

Die Kv-Sprache wird auch hier erklärt, siehe jedoch [Programmierhandbuch (übersetzt) »Kv-Sprache (übersetzt)" (https://pyky.github.io/kivy-doc-ja/guide/lang.html). Wir empfehlen Ihnen, es zu lesen.

Referenz

[Hinweis] Informationen zur Verwendung von Kv Language

Es ist möglich, Code in Python zu schreiben, um Layouts wie jede andere GUI-Bibliothek ohne Verwendung von Kv Language zu erstellen. Einige Leute in Japan sind nur in Python-Code geschrieben.

Sie können jedoch Kv Language verwenden, um ** Layout- und Funktionsbeschreibungen zu trennen **. Dies erleichtert das Verständnis des Codes, wenn Sie Funktionen hinzufügen oder das Layout ändern möchten. Wenn Sie beispielsweise eine App erstellen und an Benutzer verteilen und das Layout ändern möchten, ohne die Funktion zu ändern, können Sie die kv-Datei direkt ändern und das Layout nach Ihren Wünschen ändern.

[Hinweis] Informationen zur Datei zum Schreiben der Kv-Sprache

Obwohl es sich um Kv-Sprache handelt, können Sie je nach der Datei, in die Sie schreiben, aus drei Mustern auswählen.

  1. Schreiben Sie direkt in eine Python-Datei
  2. Erstellen und beschreiben Sie eine kv-Datei (Erweiterung .kv), die dem Namen der App-Unterklasse entspricht
  3. Geben Sie die entsprechende Kv-Datei in der Python-Datei an und beschreiben Sie die Kv-Datei.

Es ist eine Methode, direkt in die Python-Datei 1 zu schreiben, aber die Builder-Klasse zu importieren und zu beschreiben. Die Art zu schreiben ist wie folgt.

from kivy.lang import Builder
Builder.load_string("""
<App Name>:
Inhalt
""")

Methode 2 wurde bereits behandelt, daher werde ich sie weglassen. Es ist eine Methode, um die entsprechende Kv-Datei in der Python-Datei von 3 anzugeben, aber die Schreibmethode ist wie folgt.

from kivy.lang import Builder
Builder.load_file('file.kv')

In diesem Fall ist file.kv die Kv-Datei, die dieser Python-Datei entspricht. Normalerweise wird es oft mit einer oder zwei Methoden beschrieben. Ich denke, es ist von Fall zu Fall besser 1 oder 2.

Referenz

~~ Obwohl diesmal nicht behandelt, scheint es möglich zu sein, die Kv-Datei in mehrere Dateien zu unterteilen, indem eine KV-Datei mit demselben Namen wie die Breite erstellt wird. (Nicht überprüft) ~~ (Es war ein Fehler)

Es scheint, dass es mithilfe von "#: include [force] " in der Kv-Datei aufgeteilt werden kann. Siehe unten für Details.

[Hinweis] Informationen zum Kv Language-Vorschau-Tool

2017/07 / 14t hinzugefügt

Ich denke, es braucht viel Zeit, um eine Kv-Datei zu schreiben, das Ergebnis auszuführen und es zu überprüfen. Ab 1.10 wurde ein Tool namens "kviewer" hinzugefügt, das Änderungen in der kv-Datei in Echtzeit widerspiegelt. Weitere Informationen zur Installation und Verwendung finden Sie in den folgenden Artikeln.

Referenz

Vier. Anzeige mehrerer Etiketten

Ausführungsergebnis

WS000004.JPG

Code

(Es gibt keine Änderung gegenüber dem Inhalt von 3.)

Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv


BoxLayout:
    Label:
        text: "Good Morning"
    Label:
        text: "Hello"
    Label:
        text: "Good Evening"

Kommentar

Dieses Mal habe ich drei Beschriftungen erstellt und sie in gleichen Abständen horizontal angeordnet. Ich verwende ** "Box Layout" **, um das Layout festzulegen. kivy verfügt über mehrere Layouts zum Anordnen von Widgets. "Box Layout" ist ein ** Layout zum vertikalen oder horizontalen Anordnen mehrerer Widgets **.

Nachdruck aus dem offiziellen Handbuch boxlayout.gif

Kivy erstellt Layouts mithilfe eines oder mehrerer dieser Layouts. Obwohl es andere Layouttypen als BoxLayout gibt, gibt es "FloatLayout", "RelativeLayout", "GridLayout", "PageLayout", "ScatterLayout" und "StackLayout". Es wird jedoch empfohlen, zuerst ein Layout mit "BoxLayout" zu erstellen. ..

Referenz

5. Anzeige mehrerer Etiketten (vertikal)

Ausführungsergebnis

WS000005.JPG

Code

(Es gibt keine Änderung gegenüber dem Inhalt von 3.)

Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv


BoxLayout:
    orientation: 'vertical'     # 'horizontal'Dann eine Reihe
    
    Label:
        text: "Good Morning"
    Label:
        text: "Hello"
    Label:
        text: "Good Evening"

Kommentar

Im Fall von 4 wurden die Etiketten in gleichen Intervallen horizontal ausgerichtet, diesmal sind jedoch drei Etiketten vertikal ausgerichtet. Der Unterschied zur vorherigen besteht darin, dass die Kv-Datei eine Beschreibung der Ausrichtung enthält: vertikal. Orientierung ist eine der Optionen von BoxLayout und legt die Reihenfolge des Widgets fest. Es gibt zwei Arten von Werten: ** "horizontal" legt eine horizontale Zeile fest und "vertikal" legt eine vertikale Zeile fest **. Im Fall von 4 werden sie, obwohl es keine Beschreibung der Ausrichtung gibt, in einer horizontalen Reihe angeordnet, da die Standardeinstellung für die Ausrichtung "horizontal" ist.

[Anmerkung] Über Kivys Koordinatensystem

Wie Sie diesmal aus der Anordnung sehen können, sind die Ursprungskoordinaten von Kivy ** unten links **. Dies ist einer der schwer erreichbaren Punkte von Kivy. Sobald Sie sich daran gewöhnt haben, gibt es kein Problem mehr. Denken Sie jedoch daran, dass Kivy im Gegensatz zu den meisten GUI-Programmen seinen Ursprung unten links hat.

6. Größenanpassung

Ausführungsergebnis

WS000006.JPG

Code

(Es gibt keine Änderung gegenüber dem Inhalt von 3.)

Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv


BoxLayout:
    orientation: 'vertical'     # 'horizontal'Dann eine Reihe
    
    Label:
        text: "Good Morning"
        size_hint_y: 0.5
    Label:
        text: "Hello"
        size_hint_y: 1
    Label:
        text: "Good Evening"
        size_hint_y: 2

Das Ausführungsergebnis ist wie folgt.

Kommentar

size_hint_y: <Wert> wird dem Parameter neu hinzugefügt. Infolgedessen hat sich die Position von Label geändert. Durch Hinzufügen eines Werts zu ** size_hint_x ** wird die Größe in x-Richtung geändert, und durch Hinzufügen eines Werts zu ** size_hint_y ** wird die Größe in y-Richtung geändert. Standardmäßig sind beide auf 1 gesetzt. Die Größe ist das Verhältnis der Größe des gesamten Bildschirms. In diesem Fall ist es beispielsweise die Größe des Etiketts "Good Morning". Y-Richtungsverhältnis = (Good Morning-Wert) / (alle size_hint-Werte) = 0,5 / (0,5 + 1 + 2) = 14% Wird 14% der Größe des gesamten Bildschirms sein.

Zusätzlich zu size_hint gibt es eine Einstellung namens pos_hint, die die Koordinaten aus dem Bildschirmverhältnis festlegt. Übrigens können Sie mit Kivy Koordinaten für Koordinaten anstelle von Verhältnissen angeben, dies wird jedoch nicht empfohlen. Der Grund dafür ist, dass die Bildschirmgröße frei geändert werden kann. Wenn Sie also das Widget durch Koordinaten angeben, ist die Position festgelegt und wird nicht sauber angezeigt.

Es gibt verschiedene Möglichkeiten, die Position in Kivy anzugeben, aber im Grunde gibt es kein Problem, wenn Sie sie mit ** size_hint und pos_hint ** festlegen. Ich werde dieses Mal nicht auf pos_hint eingehen. Wenn Sie also interessiert sind, schreiben Sie bitte den Code und probieren Sie ihn aus.

Obwohl es sich um einen gültigen Hinweiswert handelt, ist 0,1 bis 1 ein gültiger Bereich, wenn Sie sich das Handbuch ansehen. Wie Sie jedoch sehen können, wenn Sie den Code tatsächlich schreiben, funktioniert er effektiv, selbst wenn Sie einen Wert von * 10 oder 100 eingeben. Es scheint, dass entweder das Handbuch oder die interne Implementierung von Kivy fehlt.

7. 7. Größenanpassung 2

Ausführungsergebnis

WS000007.JPG

Code

(Es gibt keine Änderung gegenüber dem Inhalt von 3.)

Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv


BoxLayout:
    orientation: 'vertical'     # 'horizontal'Dann eine Reihe
    
    Label:
        text: "Good Morning"
        size_hint_y: 0.5
    Label:
        text: "Hello"
        size_hint_y: 1
    Label:
        text: "Good Evening"
        size_hint_y: 0.5

Kommentar

Ich habe den Wert von 6 geändert.

8. Ändern Sie die Textfarbe und die Etikettenfarbe

Ausführungsergebnis

WS000008.JPG

Code

main.py


#-*- coding: utf-8 -*-

from kivy.app import App


class TestApp(App):

    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'greeting'    #Fenster umbenennen

if __name__ == '__main__':
	TestApp().run()


Kv-Datei

test.kv


BoxLayout:

    Label:        
        text: "Good Morning"
        color: 1,0,1,1
        size_hint_x: 0.5
    Label:
        text: "Hello"
        color: 0,1,0,1 # rgba
        size_hint_x: 1
        
        canvas.before:
            Color:
                rgba: 0, 1, 1, 1
            Rectangle:
                pos: self.pos
                size: self.size
    Label:
        text: "Good Evening"
        color: 0,0,1,1 # rgba
        size_hint_x: 0.5

Kommentar

Auf der Python-Seite wird beim Initialisieren der TestApp-Klasse der folgende Befehl eingefügt.

self.title = 'greeting'    #Fenster umbenennen

Auf diese Weise können Sie den Titelnamen ändern, der beim Start oben links im Fenster angezeigt wird.

Referenz

Außerdem wurde für Kv-Dateien ein neuer "Farb" -Parameter zu Label hinzugefügt. "Farbe" ist ein Parameter für die Farbe von Buchstaben. Die zu verwendenden Werte sind die Listenstruktur von [r (rot), g (gelb), b (blau), a (Transparenz)]. Der Bereich gültiger Werte liegt zwischen 0 und 1. In Kivy gibt es verschiedene andere Möglichkeiten, die Farbe anzugeben, z. B. den HSV-Modus. Es reicht aus, sich daran zu erinnern, dass ** Farben zum Anzeigen von Farben verwenden **. Ich ändere auch die Hintergrundfarbe von Label, was durch den folgenden Code realisiert wird

        canvas.before:              #①
            Color:                        #②
                rgba: 0, 1, 1, 1
            Rectangle:                #③
                pos: self.pos     
                size: self.size 

① Farbe mit dem Canvas-Befehl. zuvor wird hier nicht im Detail erklärt, für Leinwand siehe [Programmierhandbuch (übersetzt) »Grafik (übersetzt)" (https://pyky.github.io/kivy-doc-ja/guide/graphics.html) Lesen Sie bitte. Für ② Farbe mit (R, G, B, A) = (0,1,1,1). Beachten Sie, dass die Öffnung C in Großbuchstaben geschrieben ist, was sich von Label unterscheidet. ③ Rechteck ist ein Befehl zum Anzeigen eines Rechtecks (Quadrats). Der Parameter pos gibt die anzuzeigenden Koordinaten an, und size gibt die Breite und Höhe des Zeichenbereichs an. Ich benutze self für die Werte von pos und size hier, aber ** self ist das reservierte Wort für Kv und ich benutze es, um dieses Widget zu erhalten **. Dieses Mal wird in der Beschriftung Hallo angezeigt, also zeigt self.pos auf die xy-Koordinaten der Beschriftung und self.size auf die Werte für Breite und Höhe dieser Beschriftung. Auf diese Weise können Sie ein (0.1.1.1.1) Farbquadrat für die Koordinaten, die Breite und die Höhe des Etiketts zeichnen, auf dem Hallo angezeigt wird. Zusätzlich zu Quadraten können Sie Dreiecke, Kreise und Linien zeichnen.

Referenz

[Hinweis] Über Kv reservierte Wörter

Kivy Language verfügt über einige reservierte Wörter, die für die Verwendung im System festgelegt sind. Das Folgende sind typische.

Referenz

9. Schaltfläche Hinzufügen

Ausführungsergebnis

WS000010.JPG

Code

~~ (Es gibt keine Änderung gegenüber dem Inhalt von 8.) ~~ 2018/02/03 Hinzugefügt: Es gab einen Hinweis im Netz. 8. Wenn es unverändert bleibt, tritt ein Fehler auf.

main.py


#-*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import StringProperty 

class TextWidget(Widget):
    pass

class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'greeting'
        
    def build(self):
        return TextWidget()

if __name__ == '__main__':
	TestApp().run()


Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv


TextWidget:

<TextWidget>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size
        
        #Etikette
        Label:
            id: label1
            font_size: 68
            text: "Hello World"
        
        Button:
            id: button1
            text: "OK"
            font_size: 48

Kommentar

Ein neuer Button wurde hinzugefügt. Button ist eine Unterklasse von Label, sodass Sie die in Label verwendeten Parameter verwenden können. Selbst wenn ich dieses Programm starte und auf die Schaltfläche OK klicke, passiert nichts, nur die Farbe der Schaltfläche ändert sich, wenn ich darauf klicke. Was ich hier tun konnte, ist nur ein Layout mit Beschriftung und Schaltfläche, und ich habe den Vorgang nicht registriert, wenn eine Aktion (Ereignis) für die Schaltfläche ausgelöst wird. Die Registrierung des Vorgangs wird im nächsten Punkt erläutert. Außerdem ist font_size die Größe der angezeigten Zeichen. Standardmäßig ist es 15, aber da die Anzeigegröße klein war, habe ich sie erhöht.

Außerdem wird für jedes Widget ein neuer Parameter namens id hinzugefügt, aber dieses Mal werde ich ihn nicht berühren. Die Verwendung wird im Referenzpunkt erläutert.

2018/02/03 Ergänzung: Dieses Mal haben wir TextWidget hinzugefügt, ein benutzerdefiniertes Widget, und dort ein vorhandenes Widget wie Button hinzugefügt. Das Hinzufügen eines benutzerdefinierten Widgets zu einer Kv-Datei führt zu einem Fehler. Der Grund ist, dass Kivy das TextWidget nicht lösen kann. Daher muss die TextWidget-Klasse deklariert werden, die die Widget-Klasse auf der Python-Dateiseite erbt.

Zehn. Hinzufügen von Funktionen beim Drücken einer Taste

Ausführungsergebnis

WS000012.JPG

Code

Der Code ist unten.

main.py


#-*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import StringProperty 

class TextWidget(Widget):
    text = StringProperty()    #Eigenschaft hinzufügen

    def __init__(self, **kwargs):
        super(TextWidget, self).__init__(**kwargs)
        self.text = ''

    def buttonClicked(self):        #Wenn Sie auf die Schaltfläche klicken
        self.text = 'Hello World'


class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'greeting'
        
    def build(self):
        return TextWidget()

if __name__ == '__main__':
	TestApp().run()


Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv


TextWidget: #Zur Route hinzufügen

<TextWidget>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size
        
        #Etikette
        Label:
            id: label1
            font_size: 68
            text: root.text    # root(TextWidget)Ruft den Wert des variablen Textes von ab
        
        Button:
            id: button1
            text: "OK"
            font_size: 68
            on_press: root.buttonClicked()  #Rufen Sie die Funktion auf der Python-Seite auf, wenn Sie auf die Schaltfläche klicken

Kommentar

Wenn ich das Programm starte, wird beim Start nichts auf dem Etikett angezeigt, aber wenn ich auf die Schaltfläche OK klicke, werden die Wörter "Hello World" auf dem Etikett angezeigt. Zunächst der Befehl auf der Python-Seite

from kivy.properties import StringProperty 

Importiert StringProperty aus kivy.properties. kivy properties ist ein Mechanismus, der ausgeführt wird, wenn sich der Wert des Objektattributs ändert, wenn ein Ereignis ausgeführt wird, z. B. wenn eine Schaltfläche gedrückt wird. Dieses Mal werden die Buchstaben auf dem Etikett geändert, wenn die Taste gedrückt wird. Obwohl es sich um eine Eigenschaft handelt, gibt es für jede Zeichenfolge, Nummer und jeden Wörterbuchtyp einen Typ. Die Typen sind wie folgt.

Weitere Informationen zur Eigenschaft finden Sie im [Programmierhandbuch (übersetzt) »Ereignisse und Eigenschaften (übersetzt)" (https://pyky.github.io/kivy-doc-ja/guide/events.html). Danach wird im eigentlichen Code der Klassenvariablentext in der TextWidget-Klasse deklariert und dort StringProperty () zugewiesen. Danach wird in der Methode "init" dem Text ein Leerzeichen zugewiesen, eine Funktion buttonClicked () erstellt und dem Text darin das Zeichen "Hello World" zugewiesen.

class TextWidget(Widget):
    text = StringProperty()    #Eigenschaft hinzufügen

    def __init__(self, **kwargs):
        super(TextWidget, self).__init__(**kwargs)
        self.text = ''

    def buttonClicked(self):        #Wenn Sie auf die Schaltfläche klicken
        self.text = 'Hello World

Auf der anderen Seite ist es, obwohl es sich um eine kv-Datei handelt, wie folgt mit Beschriftungen und Schaltflächen.


        #Etikette
        Label:
            id: label1
            font_size: 68
            text: root.text    # root(TextWidget)Ruft den Wert des variablen Textes von ab
        
        Button:
            id: button1
            text: "OK"
            font_size: 68
            on_press: root.buttonClicked()  #Rufen Sie die Funktion auf der Python-Seite auf, wenn Sie auf die Schaltfläche klicken

Zunächst wird root.text im Textparameter von Label festgelegt. root ist ein reservierter Begriff für die Kv-Sprache, der sich auf das Root-Widget bezieht. Hier zeigen wir also auf den Text der TextWidget-Klassenvariablen.

Darüber hinaus verfügt Button über einen zusätzlichen Parameter namens on_press. on_press ist ein Ereignis, das im Voraus in Kivy vorbereitet und ausgeführt wird, wenn der Button gedrückt wird. In diesem Fall setzen Sie root.buttonClicked (), wodurch TextWigets buttonClicked () ausgeführt wird, wenn die OK-Taste gedrückt wird.

Darüber hinaus enthält das Button-Ereignis "on_release". Dies ist das Ereignis, das ausgeführt wird, wenn die Schaltfläche losgelassen wird.

Referenz

11. Wenn Sie mehrere Schaltflächen hinzufügen

Ausführungsergebnis

Am Anfang WS000013.JPG

Klicken Sie auf Morgen WS000014.JPG

Klicken Sie auf Tag WS000015.JPG

Klicken Sie auf Nacht WS000016.JPG

Code

Der Code ist unten.

main.py


#-*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import StringProperty

class TextWidget(Widget):
    text = StringProperty()

    def __init__(self, **kwargs):
        super(TextWidget, self).__init__(**kwargs)
        self.text = ''

    def buttonClicked(self):
        self.text = 'Good morning'

    def buttonClicked2(self):
        self.text = 'Hello'

    def buttonClicked3(self):
        self.text = 'Good evening'


class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'greeting'

if __name__ == '__main__':
	TestApp().run()

Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv


#-*- coding: utf-8 -*-


TextWidget: #Zur Route hinzufügen

<TextWidget>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size
        
        #Etikette
        Label:
            id: label1
            font_size: 68
            text: root.text

        BoxLayout:
            Button:
                id: button1
                text: "morning"
                font_size: 68
                on_press: root.buttonClicked()  #Wenn Sie auf die Schaltfläche klicken

            Button:
                id: button2
                text: "day"
                font_size: 68
                on_press: root.buttonClicked2()  #Wenn Sie auf die Schaltfläche klicken

            Button:
                id: button3
                text: "night"
                font_size: 68
                on_press: root.buttonClicked3()  #Wenn Sie auf die Schaltfläche klicken

Kommentar

Zunächst wird auf der Seite der Python-Datei die Erklärung hier weggelassen, da die Funktion beim Drücken mehrerer Tasten nur aus dem vorherigen Inhalt hinzugefügt wird.

Obwohl es sich um Kv-Sprache handelt, gibt es meines Erachtens kein Problem, da die Bedienung beim Drücken der Taste beim letzten Mal erläutert wurde. Das Problem ist das Layout, diesmal hat es die folgende Struktur

<TextWidget>:
    BoxLayout:     #①
        orientation: 'vertical'
        size: root.size

        Label:
~ Ausgelassen ~
        BoxLayout: #②
            Button:
~ Ausgelassen ~
            Button:
~ Ausgelassen ~
              Button:
~ Ausgelassen ~
  

BoxLayout wird zweimal verwendet, aber zuerst ist die Ausrichtungseinstellung in BoxLayout von ① "vertikal". Dadurch wird ein Layout erstellt, in dem der Bildschirm in obere und untere Teile unterteilt ist. Fügen Sie dann ein Etikett hinzu, das oben auf dem oberen und unteren geteilten Bildschirm platziert wird. Das Problem befindet sich am unteren Bildschirmrand. Zum Zeitpunkt der Platzierung wird das Box-Layout in ② platziert. Es ist kein Orientierungsparametersatz festgelegt, aber die Ausrichtung ist standardmäßig auf "horizontal" eingestellt. Infolgedessen ist am unteren Bildschirmrand nebeneinander angeordnet, und diesmal wurden drei Schaltflächen hinzugefügt, sodass drei Schaltflächen nebeneinander angeordnet sind. Durch die Kombination von zwei BoxLayouts kann die obere Hälfte des Bildschirms in einem und die untere Hälfte horizontal in drei Teilen angeordnet werden. ** Kivy ermöglicht die Installation komplexer Layouts durch Kombination mehrerer Layouts. ** ** **

12. Layout ändern

Ausführungsergebnis

Das Ausführungsergebnis ist wie folgt.

Am Anfang WS000017.JPG

Klicken Sie auf Morgen WS000018.JPG

Klicken Sie auf Tag WS000019.JPG

Klicken Sie auf Nacht WS000020.JPG

Code

Es gibt keine Änderung von 11.

Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv


<TextWidget>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size
        
        #Etikette
        Label:
            size_hint_y: 0.7    #Angepasst, um 70% des gesamten Bildschirms anzuzeigen
            id: label1
            font_size: 68
            text: root.text

        BoxLayout:
            size_hint_y: 0.3     #Angepasst, um 30% des gesamten Bildschirms anzuzeigen
            Button:
                id: button1
                text: "morning"
                font_size: 68
                on_press: root.buttonClicked()  #Wenn Sie auf die Schaltfläche klicken

            Button:
                id: button2
                text: "day"
                font_size: 68
                on_press: root.buttonClicked2()  #Wenn Sie auf die Schaltfläche klicken

            Button:
                id: button3
                text: "night"
                font_size: 68
                on_press: root.buttonClicked3()  #Wenn Sie auf die Schaltfläche klicken

Kommentar

Die Größe wird mit size_hint_y auf der Kv-Dateiseite angepasst. Die vertikale Größe des Etiketts in der oberen Hälfte ist größer und die Größe der Schaltfläche in der unteren Hälfte ist kleiner.

13. Funktion beim Klicken hinzugefügt (Textfarbe ändert)

Ausführungsergebnis

Das Ausführungsergebnis ist wie folgt.

Am Anfang WS000021.JPG

Klicken Sie auf Morgen WS000022.JPG

Klicken Sie auf Tag WS000023.JPG

Klicken Sie auf Nacht WS000024.JPG

Code

Der Code ist unten.

main.py


#-*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import StringProperty, ListProperty

class TextWidget(Widget):
    text  = StringProperty()
    color = ListProperty([1,1,1,1])

    def __init__(self, **kwargs):
        super(TextWidget, self).__init__(**kwargs)
        self.text = 'start'
        
    def buttonClicked(self):
        self.text = 'Good morning'
        self.color = [1, 0, 0 , 1]

    def buttonClicked2(self):
        self.text = 'Hello'
        self.color = [0, 1, 0 , 1 ]

    def buttonClicked3(self):
        self.text = 'Good evening'
        self.color = [0, 0, 1 , 1 ]

class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'greeting'

if __name__ == '__main__':
	TestApp().run()

Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv


#-*- coding: utf-8 -*-


TextWidget: #Zur Route hinzufügen

<TextWidget>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size

        #Etikette
        Label:
            size_hint_y: 0.7
            id: label1
            font_size: 68
            text: root.text
            color: root.color
            
        BoxLayout:
            size_hint_y: 0.3
            padding: 20,30,20, 10
            Button:
                id: button1
                text: "morning"
                font_size: 68
                on_press: root.buttonClicked()  #Wenn Sie auf die Schaltfläche klicken

            Button:
                id: button2
                text: "day"
                font_size: 68
                on_press: root.buttonClicked2()  #Wenn Sie auf die Schaltfläche klicken

            Button:
                id: button3
                text: "night"
                font_size: 68
                on_press: root.buttonClicked3()  #Wenn Sie auf die Schaltfläche klicken

Kommentar

Wir haben eine Funktion hinzugefügt, um die Farbe der auf dem Etikett angezeigten Zeichen mit dem Code bis zum vorherigen Zeitpunkt zu ändern. Was den Inhalt betrifft, deklariert die TextWidget-Klasse auf der Python-Seite eine neue Farbe als Klassenvariable mit ListProperty, um den Wert zu realisieren. color verwendet ListProperty, um mehrere Werte von rgba zu speichern.

14. Japanische Anzeige (zusätzliche Schrift)

Ausführungsergebnis

Das Ausführungsergebnis ist wie folgt.

Am Anfang WS000025.JPG

Klicken Sie am Morgen WS000026.JPG

Klicken Sie auf Mittag WS000027.JPG

Klicken Sie nachts WS000028.JPG

Code

Der Code ist unten.

main.py


#-*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import StringProperty, ListProperty

from kivy.core.text import LabelBase, DEFAULT_FONT
from kivy.resources import resource_add_path

#Ändern Sie die Standardschriftart
resource_add_path('./fonts')
LabelBase.register(DEFAULT_FONT, 'mplus-2c-regular.ttf') #Geben Sie eine japanische Schriftart an, damit Japanisch verwendet werden kann


class TextWidget(Widget):
    text  = StringProperty()
    color = ListProperty([1,1,1,1])

    def __init__(self, **kwargs):
        super(TextWidget, self).__init__(**kwargs)
        self.text = 'start'
        
    def buttonClicked(self):
        self.text = 'Guten Morgen'
        self.color = [1, 0, 0 , 1]

    def buttonClicked2(self):
        self.text = 'Hallo'
        self.color = [0, 1, 0 , 1 ]

    def buttonClicked3(self):
        self.text = 'Guten Abend'
        self.color = [0, 0, 1 , 1 ]

class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'Gruß'

if __name__ == '__main__':
	TestApp().run()


Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv



TextWidget:

<TextWidget>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size

        #Etikette
        Label:
            size_hint_y: 0.7
            id: label1
            font_size: 68
            text: root.text
            color: root.color
            
        BoxLayout:
            size_hint_y: 0.3
            padding: 20,30,20, 10
            Button:
                id: button1
                text: "Morgen"
                font_size: 68
                on_press: root.buttonClicked()

            Button:
                id: button2
                text: "Mittag"
                font_size: 68
                on_press: root.buttonClicked2()

            Button:
                id: button3
                text: "Nacht"
                font_size: 68
                on_press: root.buttonClicked3()

Kommentar

Kivy, aber in Windows gibt es Schriftdaten unter ** Python34 \ Lib \ site-packages \ kivy \ data \ fonts **, aber der Standardzeichencode ist ** Roboto, und Roboto ist eine europäische Schriftart, also japanisch wie sie ist Wird nicht richtig angezeigt **. Um Japanisch anzuzeigen, müssen Sie eine Schriftart verwenden, die Japanisch selbst anzeigt. Auf der Python-Codeseite

from kivy.core.text import LabelBase, DEFAULT_FONT
from kivy.resources import resource_add_path

#Ändern Sie die Standardschriftart
resource_add_path('./fonts')
LabelBase.register(DEFAULT_FONT, 'mplus-2c-regular.ttf') #Geben Sie eine japanische Schriftart an, damit Japanisch verwendet werden kann

Resource_add_path gibt jedoch den Lesepfad in kivy an. Als Nächstes gibt LabelBase.register die Schriftart an, die Japanisch als Standardschrift anzeigen kann. Dieses Mal wird der Ordner "fonts" in derselben Hierarchie wie die Python-Datei erstellt und die Datei "mplus-2c-regulär.ttf" dort abgelegt. Die Datei "mplus-2c-regulär.ttf" wird als Schriftart für die Anzeige von Zeichen angegeben.

Ich denke, es gibt ungefähr zwei Möglichkeiten, Japanisch anzuzeigen.

Es ist eine Methode, um eine Schriftart anzugeben, die Japanisch in der Systemschriftart für jedes Betriebssystem anzeigen kann. Kivy verfügt jedoch über eine Funktion namens Plattform. Sie können es verwenden, um das Betriebssystem zur Laufzeit abzurufen. Sie können dies verwenden, um die Standardanzeige für jedes Betriebssystem zu ändern. Es gibt Leute, die das auch in Japan machen.

Referenz

Wenn diese Methode verwendet wird, ist die für ein Modell mit vielen Anpassungen für jedes Modell angegebene Schriftart, z. B. ein unbekanntes Betriebssystem oder Android, möglicherweise nicht vorhanden.

Um eine Schriftart und eine Standardschriftart beim Start vorzubereiten, bereiten Sie eine Schriftartdatei (.ttf) vor, fügen Sie sie dem Programm bei und legen Sie fest, dass sie beim Start verwendet werden soll. Dieses Mal verwende ich diese Methode. Die Schriftart verwendet eine lizenzfreie Schriftart namens M +. Es gibt verschiedene Möglichkeiten, die Schriftart anzugeben, und einige werden vorgestellt. Wenn Sie also interessiert sind, schauen Sie sich bitte Folgendes an.

Update 2019/7/30 Ich möchte eine Person vorstellen, die ein Paket für die Anzeige von Japanisch erstellt hat.

Python: Ich habe japanize-kivy erstellt, mit dem Kivy Japanisch nur durch Importieren anzeigen kann

Referenz

Hinweis Informationen zum Zeichencode der Kv-Datei

Unter Windows wird die kv-Datei nur dann korrekt angezeigt, wenn sie als "shift-jis" für die Python 3-Serie und als "utf-8" für die 2-Serie gespeichert ist.

Hinweis zum App-Titel

~~ Wenn es sich um ein Python2-System handelt, tritt ein Fehler auf, selbst wenn Sie "u'Japanese '" eingeben. Die Fehlermeldung lautet wie folgt. Wenn Sie wissen, was zu tun ist, kontaktieren Sie uns bitte. ~~

File "c:\Python27\lib\site-packages\kivy\core\window\window_sdl2.py", line 332, in set_title
     self._win.set_window_title(title)
 TypeError: Argument 'title' has incorrect type (expected str, got unicode)

Nachtrag 2017/2/4 Ich konnte es mit dem Inhalt anzeigen, den Sie mir im Kommentar mitgeteilt haben. Nachdem Sie "title" als "u'Japanese '" angezeigt haben, können Sie es ausführen, indem Sie "main" wie folgt einstellen.

import sys

if __name__ == '__main__':
     reload(sys)
     sys.setdefaultencoding('utf-8')
     TestApp().run()

Referenz http://d.hatena.ne.jp/shu223/20111201/1328334689 http://blog.livedoor.jp/kaz0215/archives/51124286.html

15. 15. Informationen zum Ändern der Auflösung beim Start und zum Wiederverwenden von Parametern

Ausführungsergebnis

Das Ausführungsergebnis ist wie folgt.

Am Anfang WS000029.JPG

Der Code ist unten.

main.py


#-*- coding: utf-8 -*-
from kivy.config import Config
Config.set('graphics', 'width', '640')
Config.set('graphics', 'height', '480')

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import StringProperty, ListProperty

from kivy.core.text import LabelBase, DEFAULT_FONT
from kivy.resources import resource_add_path

#Ändern Sie die Standardschriftart
resource_add_path('./fonts')
LabelBase.register(DEFAULT_FONT, 'mplus-2c-regular.ttf') #Geben Sie eine japanische Schriftart an, damit Japanisch verwendet werden kann


class TextWidget(Widget):
    text  = StringProperty()
    color = ListProperty([1,1,1,1])

    def __init__(self, **kwargs):
        super(TextWidget, self).__init__(**kwargs)
        self.text = 'start'
        
    def buttonClicked(self):
        self.text = 'Guten Morgen'
        self.color = [1, 0, 0 , 1]

    def buttonClicked2(self):
        self.text = 'Hallo'
        self.color = [0, 1, 0 , 1 ]

    def buttonClicked3(self):
        self.text = 'Guten Abend'
        self.color = [0, 0, 1 , 1 ]

class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'Gruß'

if __name__ == '__main__':
	TestApp().run()



Die Kv-Sprache ist wie folgt.

test.kv




TextWidget:


<MyButton@Button>:
    font_size: 68

<TextWidget>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size

        #Etikette
        Label:
            size_hint_y: 0.7
            id: label1
            font_size: 68
            text: root.text
            color: root.color
            
        BoxLayout:
            size_hint_y: 0.3
            padding: 20,30,20, 10
            MyButton:
                id: button1
                text: "Morgen"
                #font_size: 68
                on_press: root.buttonClicked()

            MyButton:
                id: button2
                text: "Mittag"
                #font_size: 68
                on_press: root.buttonClicked2()

            MyButton:
                id: button3
                text: "Nacht"
                #font_size: 68
                on_press: root.buttonClicked3()
                

Kommentar

Es ist schwer zu verstehen, ob es sich um ein Bild handelt, aber wenn Sie es starten, können Sie feststellen, dass die Bildschirmgröße kleiner ist.

from kivy.config import Config
Config.set('graphics', 'width', '640')
Config.set('graphics', 'height', '480')

Die folgenden Befehle wurden am Anfang der Python-Datei hinzugefügt. Kivy wird standardmäßig unmittelbar nach der Installation mit einer Auflösung von 800 x 600 gestartet. Es ist in [Programmieranleitung (übersetzt) »Kivy konfigurieren (übersetzt)" (https://pyky.github.io/kivy-doc-ja/guide/config.html) geschrieben, aber Kivy sagt "config. Die Grundeinstellungen werden dort in einer Datei namens "ini" beschrieben. Unter Windows befindet es sich unter * C: \ Benutzer \ <Benutzername \ .kivy *. Der Inhalt von "config.ini" lautet wie folgt.

[kivy]
keyboard_repeat_delay = 300
keyboard_repeat_rate = 30
log_dir = logs
log_enable = 1
log_level = info
log_name = kivy_%y-%m-%d_%_.txt
window_icon = 
keyboard_mode = 
keyboard_layout = qwerty
desktop = 1
exit_on_escape = 1
pause_on_minimize = 0
config_version = 14

[graphics]
display = -1
fullscreen = 0
height = 600
left = 0
maxfps = 60
multisamples = 2
position = auto
rotation = 0
show_cursor = 1
top = 0
width = 800
resizable = 1
borderless = 0
window_state = visible
minimum_width = 0
minimum_height = 0

[input]
mouse = mouse
wm_touch = wm_touch
wm_pen = wm_pen

[postproc]
double_tap_distance = 20
double_tap_time = 250
ignore = []
jitter_distance = 0
jitter_ignore_devices = mouse,mactouch,
retain_distance = 50
retain_time = 0
triple_tap_distance = 20
triple_tap_time = 375

[widgets]
scroll_timeout = 250
scroll_distance = 20
scroll_friction = 1.
scroll_stoptime = 300
scroll_moves = 5

[modules]


Von diesen sind die Höhen- und Breitenwerte des Elements "Grafik" die Auflösung beim Start. Es ist möglich, den Inhalt dieser config.ini neu zu schreiben und zu ändern. Wenn er jedoch verteilt wird, hängt dies von der Einstellung der config.ini für jeden Benutzer ab. Ändern Sie ihn daher vorübergehend wie folgt Ist auch möglich.

Referenz Machen wir eine einfache App mit Kivy

Alternativ können Sie windw () verwenden, um die Auflösung zu ändern.

from kivy.core.window import Window
#Window.size = (450, 600)

Wenn Sie es jedoch mit dieser Methode auf einem mobilen Gerät wie Android anzeigen, ist die Auflösung merkwürdig. Wenn Sie es also auf einem mobilen Gerät anzeigen möchten, verwenden Sie nicht window () oder die zuvor erläuterte Plattform und zeigen Sie es je nach Betriebssystemtyp nicht an Usw. ist erforderlich.

Es ist auch eine Kv-Datei, aber es ist wie folgt

<MyButton@Button>: # ①
    font_size: 68

<TextWidget>:
~ Ausgelassen ~
            MyButton: #②
                id: button1
                text: "Morgen"
                #font_size: 68
                on_press: root.buttonClicked()
            MyButton:
                id: button2
                text: "Mittag"
                #font_size: 68
                on_press: root.buttonClicked2()

            MyButton:
                id: button3
                text: "Nacht"
                #font_size: 68
                on_press: root.buttonClicked3()

Der Unterschied zum letzten Mal ist In (1) wird das Widget "MyButton @ Button" deklariert, und in (2) wurde "Button" bis zum letzten Mal gesetzt, aber es wird auf "MyButton" gesetzt. In Kivy können Sie den Widget-Typ nach @ erben, indem Sie beim Deklarieren des Widgets ** Widget @ Widget-Typ ** deklarieren. Dieses Mal habe ich ein Widget "MyButton" erstellt, das das Widget "Button" erbt, indem es ein Widget "Button" deklariert. Durch Festlegen von font_size in MyButton ist es nicht erforderlich, font_size für jede Schaltfläche bis zum letzten Mal einzeln anzugeben, und es kann derselbe Wert verwendet werden. Weitere Informationen finden Sie unter [Programmierhandbuch (übersetzt) »Kv-Sprache (übersetzt)" (https://pyky.github.io/kivy-doc-ja/guide/lang.html).

16. Bildschirm

Ausführungsergebnis

Das Ausführungsergebnis ist wie folgt.

Am Anfang WS000033.JPG

Code

Der Code ist unten.

main.py


#-*- coding: utf-8 -*-
from kivy.config import Config
Config.set('graphics', 'width', '640')
Config.set('graphics', 'height', '480')

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import StringProperty, ListProperty

from kivy.core.text import LabelBase, DEFAULT_FONT
from kivy.resources import resource_add_path

#Ändern Sie die Standardschriftart
resource_add_path('./fonts')
LabelBase.register(DEFAULT_FONT, 'mplus-2c-regular.ttf') #Geben Sie eine japanische Schriftart an, damit Japanisch verwendet werden kann


class TextWidget(Widget):
    text  = StringProperty()

    def __init__(self, **kwargs):
        super(TextWidget, self).__init__(**kwargs)
        pass
        
    def buttonClicked(self):
        pass

    def buttonClicked2(self):
        pass

    def buttonClicked3(self):
        pass
        
class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'Bildschirm'

if __name__ == '__main__':
	TestApp().run()

Die Kv-Sprache ist wie folgt.

test.kv




TextWidget:

<TextWidget>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size

        Image:
            source: './image/sample2.jpg'

            
        BoxLayout:
            size_hint_y: 0.3
            padding: 20,30,20, 10
            Button:
                id: button1
                text: "Probe 1"
                font_size: 30
                on_press: root.buttonClicked()

            Button:
                id: button2
                text: "Probe 2"
                font_size: 30
                on_press: root.buttonClicked2()

            Button:
                id: button3
                text: "Probe 3"
                font_size: 30
                on_press: root.buttonClicked3()
                

Kommentar

Bilder können auf Kivy angezeigt werden.

python


        Image:
            source: './image/sample2.jpg'

Sie können das Bild durch Angabe anzeigen. Sie können die Anzeigegröße auch mithilfe des Größenparameters ändern. Dieses Mal wird durch Klicken auf die Schaltfläche das Bild nicht gewechselt. Das Umschalten von Bildern durch Klicken auf eine Schaltfläche wird im nächsten Punkt erläutert.

Referenz

17. Bildanzeige (Bildumschaltung mit Tasten)

Ausführungsergebnis

Das Ausführungsergebnis ist wie folgt.

Beim Start oder beim Klicken auf Beispiel 1 WS000000.JPG

Wenn Sie auf Beispiel 2 klicken WS000001.JPG

Wenn Sie auf Beispiel 3 klicken WS000002.JPG

Code

Der Code ist unten.

main.py


#-*- coding: utf-8 -*-
from kivy.config import Config
Config.set('graphics', 'width', '640')
Config.set('graphics', 'height', '480')

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import StringProperty

from kivy.core.text import LabelBase, DEFAULT_FONT
from kivy.resources import resource_add_path

#Ändern Sie die Standardschriftart
resource_add_path('./fonts')
LabelBase.register(DEFAULT_FONT, 'mplus-2c-regular.ttf') #Geben Sie eine japanische Schriftart an, damit Japanisch verwendet werden kann

resource_add_path('./image')


class ImageWidget(Widget):
    source = StringProperty('./image/sample.jpg')
    #source = StringProperty(None)
    

    def __init__(self, **kwargs):
        super(ImageWidget, self).__init__(**kwargs)
        pass
        
    def buttonClicked(self):
        self.source= './image/sample.jpg'

    def buttonClicked2(self):
        self.source = 'sample2.jpg'

    def buttonClicked3(self):
        self.source = 'sample3.jpg'

        
class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'Bildschirm'

if __name__ == '__main__':
	TestApp().run()

Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv



ImageWidget:

<ImageWidget>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size

        Image:
            source: root.source

            
        BoxLayout:
            size_hint_y: 0.3
            padding: 20,30,20, 10
            Button:
                id: button1
                text: "Probe 1"
                font_size: 30
                on_press: root.buttonClicked()

            Button:
                id: button2
                text: "Probe 2"
                font_size: 30
                on_press: root.buttonClicked2()

            Button:
                id: button3
                text: "Probe 3"
                font_size: 30
                on_press: root.buttonClicked3()
                

Kommentar

Obwohl es sich um eine Erklärung handelt, denke ich, dass Sie den Inhalt grob verstehen können, wenn Sie den Inhalt bis zum letzten Mal lesen. Daher werde ich die ausführliche Erklärung weglassen. Erstellen Sie jedoch auf Python-Seite eine Klassenvariablenquelle mit StringProperty. Wenn Sie auf die Schaltfläche klicken, wird eine Bilddatei angezeigt Der Pfad wird umgeschaltet und angezeigt.

Dieses Mal ist das Bild ein verarbeitetes Bild, aber bei buttonClicked () wird ein Filter angewendet, der eine Bildbibliothek wie Pillow oder OpenCV verwendet, um eine Bilddatei zu generieren, und diese Bilddatei wird generiert. Ich denke, es kann verarbeitet werden. Es ist auch möglich, direkt als Byte-Zeichenfolge zu lesen, ohne eine Bilddatei zu generieren. In diesem Fall kann dies mithilfe von Textures blit_buffer () realisiert werden.

Update 2017/10/09 In einem anderen Artikel habe ich einen Artikel darüber geschrieben, wie von OpenCV oder Pillow gelesene Bilder mit blit_buffer () angezeigt werden.

Anzeigen von Bildern mit Opencv oder Pillow mit Python Kivy

Referenz

Zusammenfassung

Bisher habe ich das grundlegende Layout und die Ausführung des Vorgangs beim Klicken auf die Schaltfläche erläutert, sodass ich denke, dass es jetzt möglich ist, eine einfache Anwendung zu implementieren. Wenn Sie den bisherigen Inhalt lesen und den "Programmierleitfaden" von Official Manual Translation Site erneut lesen, werden Sie verschiedene Entdeckungen finden. Es wird empfohlen, es einmal zu lesen.

Obwohl es sich um ein Beispielprogramm von Kivy handelt, gibt es in [unter Beispiel] von Kivy verschiedene Beispiele (https://github.com/kivy/kivy/tree/master/examples). Ich denke, Sie sollten einen Blick darauf werfen. Ich werde. Siehe Galerie der Beispiele (übersetzt) »Galerie (übersetzt) und [Getting] Gestartet »Beispiele](https://pyky.github.io/kivy-doc-ja/gettingstarted/examples.html) enthält eine Beschreibung des Inhalts.

Kivy selbst hat viele Funktionen, aber ich hoffe, Sie lesen dies und finden etwas Nützliches. Freiwillige machen auch Übersetzung des offiziellen Handbuchs. Wenn Sie also interessiert sind, schließen Sie sich uns an. 2017 denke ich darüber nach, mich auf API zu konzentrieren.

Referenz: Wählen Sie eine Datei aus

Wenn Sie eine Datei in Kivy auswählen, können Sie mit Dateiauswahl den Dateiauswahldialog öffnen.

Obwohl es sich um die tatsächliche Verwendung handelt, lesen Sie bitte die folgende Website, da andere Personen die tatsächliche Verwendung mit dem Code veröffentlicht haben.

Referenz

Referenz: Über japanische Eingaben (Achtung)

Geben Sie im Folgenden Zeichen in das Textfeld ein und klicken Sie auf die Schaltfläche "OK", um die in der Beschriftung eingegebenen Zeichen anzuzeigen.

Ausführungsergebnis

Das Ausführungsergebnis ist wie folgt. result.jpg

Code

Der Code ist unten.

main.py


#-*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import StringProperty

from kivy.core.text import LabelBase, DEFAULT_FONT
from kivy.resources import resource_add_path

#Ändern Sie die Standardschriftart
resource_add_path('./fonts')
LabelBase.register(DEFAULT_FONT, 'mplus-2c-regular.ttf') #Geben Sie eine japanische Schriftart an, damit Japanisch verwendet werden kann


class TextWidget(Widget):
    text = StringProperty()

    def __init__(self, **kwargs):
        super(TextWidget, self).__init__(**kwargs)
        self.text = ''

    def buttonClicked(self):
        self.text =  self.ids["text_box"].text


class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        
    def build(self):
        return TextWidget()

if __name__ == '__main__':
	TestApp().run()

Kv-Datei

Die Kv-Sprache ist wie folgt.

test.kv


TextWidget: #Zur Route hinzufügen

<TextWidget>:
    BoxLayout:
        orientation: 'vertical'
        size: root.size
        #Etikette
        Label:
            id: label1
            font_size: 68
            text: root.text
        
        BoxLayout:
            TextInput:
                id: text_box
                size_hint_x: 70
                font_size: 68
                focus: True
                on_text_validate: root.buttonClicked()
            Button:
                id: button1
                size_hint_x: 30
                text: "OK"
                font_size: 68
                on_press: root.buttonClicked()  #Wenn Sie auf die Schaltfläche klicken
                

Kommentar

Sie können Text mit Textinput eingeben.

Es gibt jedoch ein Problem. Die japanische Eingabe selbst kann durch Angabe der Schriftart für Japanisch erfolgen. Sie können auch durch Kopieren und Einfügen einfügen. Das Problem ist, dass ** je nach Betriebssystem IME nicht geöffnet wird, sodass Zeichen in voller Breite erst angezeigt werden, wenn die Zeichen bestätigt wurden **. Offiziell ist es Problem, aber der Hintergrund des Problems ist, dass Kivy sich ursprünglich auf eine Bibliothek namens Pygame für die Zeicheneingabe und Pygames stützte Es gab ein bekanntes Problem, bei dem der IME nicht angezeigt wurde. Seitdem verlässt sich Kivy selbst nicht mehr auf Pygame und hat verschiedene Funktionen basierend auf SDL neu geschrieben, um die Verwendung von Pygame zu vermeiden. Es gibt jedoch keine Verarbeitung auf der Kivy-Seite, die das von SDL während der Eingabe (IME) ausgegebene Ereignis "SDL_TEXTEDIT" empfängt. Daher wird das von Ihnen eingegebene Japanisch nicht angezeigt.

Seien Sie vorsichtig, wenn Sie japanische Eingaben aktiv verwenden möchten. Derzeit ist IME für jedes Betriebssystem so.

** [Ergänzung] Im Juli 2018 wurde die neueste Version (1.10.1) von Kivy veröffentlicht. Hier ist die IME-Anzeige Die Content-Pull-Anforderung wurde übernommen, und IME wird ausgeführt und die eingegebenen Japaner werden angezeigt. ** ** **

Ab Juli 2018 hat sich die Situation geändert, seit die PR in Bezug auf japanische Beiträge verabschiedet wurde.

Ich habe einen Artikel darüber geschrieben, warum IME während der Eingabe von Japanisch nicht geöffnet wird, wie es geöffnet wird und wie eine Umgebung erstellt wird. Lesen Sie daher bitte Folgendes.

Über japanische Eingaben in Windows

Obwohl es inoffiziell über Windows ist, gibt es eine Person, die eine DLL erstellt hat, indem sie Code geschrieben hat, der sogar Kandidaten für eine Konvertierung ist.

Die Eingabe des Textes beim Klicken auf die Schaltfläche wird in der folgenden Referenz erläutert.

Referenz: So ermitteln Sie den Wert der kv-Datei auf der Python-Seite

Mit Blick auf den Code für "Japanische Eingabe (Hinweis)" ist TextInput der folgende Code.

test.kv



<TextWidget>:
        BoxLayout:
            TextInput:
                id: text_box    #★ Achtung
             

Hierbei ist zu beachten, dass für "id" "text_box" eingegeben wird. Obwohl es sich um den Code auf der Python-Seite handelt, lautet die Funktion buttonClicked (), die beim Drücken der Taste aufgerufen wird, wie folgt.

python.py


    def buttonClicked(self):
        self.text =  self.ids["text_box"].text

Kivy verwaltet alle mit ID und Speicherort gekennzeichneten Widgets an einem Ort mit einer wörterbuchartigen Eigenschaft namens ** self.ids **. Auf diese Weise können Sie den Wert jedes Parameters des Widgets abrufen, indem Sie den ID-Namen als Schlüssel verwenden. Weitere Informationen finden Sie unter "Programmierhandbuch (übersetzt)» Kv-Sprache (übersetzt) "(https://pyky.github.io/kivy-doc-ja/guide/lang.html)" Aus Python-Code in Kv lang " Es wird im Punkt "Zugriff auf die definierten Widgets" beschrieben. Laut dem offiziellen Website-Handbuch ist es jedoch besser, den Wert mit ObjectProperty zu lernen. Die Erklärung, wie der Wert mit ObjectProperty ermittelt wird, ist etwas kompliziert und nicht für Anfänger geeignet. Ich werde sie daher in einem anderen Artikel erläutern.

Referenz: So rufen Sie eine Funktion in einer Python-Datei auf der Kivy-Seite auf

Bis zu diesem Punkt können die Methoden (Funktionen) der Klassen auf der Python-Seite auf der Kv-Dateiseite verwendet werden, indem reservierte Wörter wie "self" und "root" verwendet werden. Wie kann ich dann im Gegenteil die auf der Python-Seite geschriebene Methode aufrufen und verwenden? Eine Möglichkeit besteht darin, die Python-Datei in die Kv-Datei zu importieren und zu verwenden.

Ausführungsbeispiel

Das Ausführungsergebnis ist wie folgt. WS000012.JPG

Code

Die Python-Datei (main.py) lautet wie folgt.

main.py


#-*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.widget import Widget

from kivy.properties import StringProperty

def buttonClicked():    #Rufen Sie diese Funktion auf
    print("call def")
    text = 'Hello World'
    
    return text

class TextWidget(Widget):

    def __init__(self, **kwargs):
        super(TextWidget, self).__init__(**kwargs)
        self.text = ''

    def buttonClicked(self):
        self.text = 'Hello World'


class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'greeting'
        
    def build(self):
        return TextWidget()

if __name__ == '__main__':
	TestApp().run()

Die Kv-Sprache ist wie folgt.

test.kv


#: import main main
# ↑①main.Import py.

TextWidget: #Zur Route hinzufügen

<TextWidget>:
    BoxLayout:
    	id: input
        orientation: 'vertical'
        size: root.size
        l_text:'aa'
  
        #Etikette
        Label:
            id: label1
            font_size: 68
            text: input.l_text  #Nach dem Klicken von aa'Hello World'Die Anzeige wechselt zu
        
        Button:
            id: button1
            text: "OK"
            font_size: 68
            on_press: input.l_text = main.buttonClicked()  # ②main.Rufen Sie die py-Funktion auf.

Kommentar

test.kv


#: import main main
# ↑①main.Import py.


<TextWidget>:
    BoxLayout:
 
~ Ausgelassen ~
        Button:
            id: button1
            text: "OK"
            font_size: 68
            on_press: input.l_text = main.buttonClicked()  # ②main.Rufen Sie die py-Funktion auf.

Ich importiere main.py in ①. Die detaillierte Verwendung ist wie folgt

python


#: import <Der Name, den Sie in der Kv-Datei verwenden möchten> <Bibliotheks- oder Dateiname, den Sie importieren möchten>

Auf diese Weise können Sie eine bestimmte Bibliothek oder einen bestimmten Dateinamen auf der Kv-Dateiseite aufrufen. Dieses Mal wird nach dem Importieren von main.py mit dem Namen main in ① buttonCliced () von main.py aufgerufen, wenn auf die Schaltfläche OK von ② geklickt wird.

Referenz

Referenz: Verwendung von GridLayout

Ich habe einen Artikel gesehen, in dem ich GridLayout mit Kivy nicht verwenden konnte, also habe ich den Code tatsächlich geschrieben, also werde ich ihn veröffentlichen.

Referenz

Ausführungsbeispiel

Das Ausführungsergebnis ist wie folgt. WS000034.JPG

Vielleicht wollte der Autor das tun.

Code

Obwohl es sich um den eigentlichen Code handelt, handelt es sich um eine Implementierung, aber ich habe zwei Pläne vorbereitet

Vorschlag 1

Die Python-Datei lautet wie folgt.

buttonlauncher.py


# -*- coding: utf-8 -*
import kivy

from kivy.app import App
from kivy.config import Config
from kivy.uix.widget import Widget
from kivy.uix.gridlayout import GridLayout
from kivy.uix.label import Label

#from kivy.lang import Builder
#Builder.load_file('buttonlauncher.kv')

class MyWidget(GridLayout):
    def __init__(self):
        super(MyWidget, self).__init__()

class ButtonLauncherApp(App):
    def build(self):
        return MyWidget()


if __name__ == '__main__':
    ButtonLauncherApp().run()

Die Kv-Sprache ist wie folgt.

buttonlauncher.kv


<MyWidget>:
    rows: 2
    cols: 2

    Button:
        text: 'button1'
    Button:
        text: 'button2'
    Button:
        text: 'button3'
    Button:
        text: 'button4'

Vorschlag 2

Die Python-Datei lautet wie folgt.

buttonlauncher2.py


# -*- coding: utf-8 -*-

import kivy
kivy.require('1.9.0')

from kivy.app import App
from kivy.config import Config
from kivy.uix.widget import Widget
from kivy.uix.label import Label

from kivy.lang import Builder
Builder.load_file('buttonlauncher2.kv')

class MyWidget(Widget):
    def __init__(self ,**kwargs):
        super(MyWidget, self).__init__()

class ButtonLauncher2App(App):
    def build(self):
        return MyWidget()


if __name__ == '__main__':
    ButtonLauncher2App().run()

Die Kv-Sprache ist wie folgt.

buttonlauncher2.kv


<MyWidget>
    GridLayout:
        rows: 2
        cols: 2
        size: root.size    #★ Ermitteln Sie den Wert des gesamten Bildschirms
        
        Button:
            text: 'button1'
        Button:
            text: 'button2'
        Button:
            text: 'button3'
        Button:
            text: 'button4'

Kommentar

Der Grund, warum nur ein Teil des unteren rechten Teils des Bildschirms angezeigt wird, es sei denn, "root.size" ist auf Größe eingestellt, ist, dass MyWidget Widget erbt, der Anfangswert von Widget jedoch 100 x 100 (Pixel) beträgt. Alle Kivy-Benutzeroberflächen haben eine Widget-Klasse als Basisklasse. Wenn Sie sie also ohne Angabe einer Größe platzieren, beträgt sie 100 x 100. Ich persönlich halte das übrigens für ziemlich wichtig, aber es ist nicht im offiziellen Tutorial angegeben. GridLayout selbst ist etwas eigenartig zu verwenden, und ich denke, es ist wahrscheinlich ein Layout, das in BoxLayout verwendet werden soll. In Bezug auf das Layout halte ich es für eine gute Idee, zuerst BoxLayout zu verwenden und dann das Layout von dort aus zusammenzustellen.

Referenzeinstellungsbildschirm

Wenn Sie in Kivy zur Laufzeit die Taste F1 drücken, wird der Konfigurationsbildschirm angezeigt. Auf diese Weise können Sie die Protokollstufe und vieles mehr ändern.

Referenz

Referenzstartoption

Ich wusste es nicht, aber Kivy hat einen Modus, mit dem Sie die hierarchische Struktur des Widgets anzeigen und den Wert von Property überprüfen können, indem Sie beim Start Parameter angeben. Wir empfehlen Ihnen, die Referenzlinks zu lesen.

Referenz

App zum Erstellen mit Kivy geeignet

Es eignet sich für Apps, die durch Drücken einer Taste auf dem Startbildschirm zu einigen Bildschirmen wechseln. Ich persönlich denke, dass es nicht für Apps geeignet ist, die häufig den Bildschirm wechseln und Werte beibehalten.

Ich denke auch nicht, dass Apps, die hochauflösende 3D-Modelle anzeigen, geeignet sind. Da OpenGL ES verwendet wird, denken einige Leute möglicherweise, dass es für 3D-Spiele geeignet ist. Wie in der offiziellen API-Referenz erwähnt, kann der Index jedoch nur bis zu 65535 anzeigen. Wenn Sie ein knuspriges 3D-Spiel erstellen möchten, sollten Sie eine Spiel-Engine wie Unity oder UE4 verwenden.

Referenz

Fortsetzung dieses Inhalts

Ich habe dir gegeben, wie man eine Taschenrechner-App macht. Verwendung von Python Kivy (2) - Erstellen eines Taschenrechners -

Recommended Posts

Verwendung von Python Kivy ~ ~ Grundlagen der Kv-Sprache ~
Verwendung von Python Kivy (Referenz) -Ich habe die Kivy-Sprache der API-Referenz übersetzt-
[Python] Zusammenfassung der Verwendung von Pandas
[Python2.7] Zusammenfassung der Verwendung von unittest
Jupyter Notebook Grundlagen der Verwendung
Grundlagen von PyTorch (1) - Verwendung von Tensor-
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
python3: Verwendung der Flasche (2)
[Python] Verwendung von Liste 1
Wie benutzt man Python Argparse?
Python: Wie man pydub benutzt
[Python] Verwendung von checkio
[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
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Python: So verwenden Sie Async mit
Zusammenfassung der Verwendung von pandas.DataFrame.loc
[Python] Verwendung der Pandas-Serie
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 der Python-API von OpenPose
Verwendung von ChemSpider in Python
Python: Verwendung von pydub (Wiedergabe)
Verwendung von PubChem mit Python
Verwendung der Zip-Funktion von Python
Wie man die Computersprache langsam benutzt
Zusammenfassung der Verwendung von csvkit
[Python] Verwendung der Typetalk-API
[Python] Zusammenfassung der Verwendung von Split- und Join-Funktionen
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
[Einführung in Python] Wie verwende ich eine Klasse in Python?
So installieren und verwenden Sie pandas_datareader [Python]
[Kivy] So installieren Sie Kivy unter Windows [Python]
[Python] Verwendung von __command__, Funktionserklärung
Berechnen Verwenden Sie% des Befehls df
Grundlegende Grammatik des Python3-Systems (Verwendung von Funktionen, Schließung, Lambda-Funktion)
[Python] Verwendung von import sys sys.argv
Python-Grundlagen ①
Grundlagen von Python ①
[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
Verwendung von "deque" für Python-Daten
Verwendung von Python zip und Aufzählung
[Python] Verstehen, wie rekursive Funktionen verwendet werden
Verwendung regulärer Ausdrücke in Python