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.
Das diesmal zu erstellende Programm lautet wie folgt.
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.
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.
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.
Die Überprüfungsumgebung ist wie folgt.
Es gibt eine Erweiterung für die Kv-Sprache im Visual Studio-Code.
https://marketplace.visualstudio.com/items?itemName=BattleBas.kivy-vscode
Ich poste Folgendes als Fortsetzung. Es wird sein, wie man einen tatsächlichen Antrag stellt.
Unten werde ich den Code und die Ergebnisse veröffentlichen.
main.py
#-*- coding: utf-8 -*-
from kivy.app import App
App().run()
Diesmal nicht verwendet
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.
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()
Diesmal nicht verwendet
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.
main.py
#-*- coding: utf-8 -*-
from kivy.app import App
class TestApp(App):
pass
if __name__ == '__main__':
TestApp().run()
test.kv
Label: # add comment
text: "Hello World"
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
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.
Obwohl es sich um Kv-Sprache handelt, können Sie je nach der Datei, in die Sie schreiben, aus drei Mustern auswählen.
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]
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
(Es gibt keine Änderung gegenüber dem Inhalt von 3.)
Die Kv-Sprache ist wie folgt.
test.kv
BoxLayout:
Label:
text: "Good Morning"
Label:
text: "Hello"
Label:
text: "Good Evening"
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
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
(Es gibt keine Änderung gegenüber dem Inhalt von 3.)
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"
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.
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.
(Es gibt keine Änderung gegenüber dem Inhalt von 3.)
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.
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.
(Es gibt keine Änderung gegenüber dem Inhalt von 3.)
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
Ich habe den Wert von 6 geändert.
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()
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
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
Kivy Language verfügt über einige reservierte Wörter, die für die Verwendung im System festgelegt sind. Das Folgende sind typische.
Referenz
~~ (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()
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
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.
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()
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
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
Am Anfang
Klicken Sie auf Morgen
Klicken Sie auf Tag
Klicken Sie auf Nacht
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()
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
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. ** ** **
Das Ausführungsergebnis ist wie folgt.
Am Anfang
Klicken Sie auf Morgen
Klicken Sie auf Tag
Klicken Sie auf Nacht
Es gibt keine Änderung von 11.
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
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.
Das Ausführungsergebnis ist wie folgt.
Am Anfang
Klicken Sie auf Morgen
Klicken Sie auf Tag
Klicken Sie auf Nacht
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()
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
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.
Das Ausführungsergebnis ist wie folgt.
Am Anfang
Klicken Sie am Morgen
Klicken Sie auf Mittag
Klicken Sie nachts
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()
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()
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
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.
~~ 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
Das Ausführungsergebnis ist wie folgt.
Am Anfang
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()
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).
Das Ausführungsergebnis ist wie folgt.
Am Anfang
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()
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
Das Ausführungsergebnis ist wie folgt.
Beim Start oder beim Klicken auf Beispiel 1
Wenn Sie auf Beispiel 2 klicken
Wenn Sie auf Beispiel 3 klicken
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()
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()
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
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.
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
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.
Das Ausführungsergebnis ist wie folgt.
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()
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
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.
[Wie man Japanisch mit Kivy eingibt (Ausführung)] (https://qiita.com/dario_okazaki/items/815cdebe91211f2b3826)
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.
github: https://github.com/Naotonosato/MilletPie
Die DLL ist da.
Erstellt von: https://weekly.ascii.jp/elem/000/000/436/436756/
Die Eingabe des Textes beim Klicken auf die Schaltfläche wird in der folgenden Referenz erläutert.
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.
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.
Das Ausführungsergebnis ist wie folgt.
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.
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
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
Das Ausführungsergebnis ist wie folgt.
Vielleicht wollte der Autor das tun.
Obwohl es sich um den eigentlichen Code handelt, handelt es sich um eine Implementierung, aber ich habe zwei Pläne vorbereitet
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'
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'
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.
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
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
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
Ich habe dir gegeben, wie man eine Taschenrechner-App macht. Verwendung von Python Kivy (2) - Erstellen eines Taschenrechners -
Recommended Posts