Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ②

Zu grobe Zusammenfassung

Nach Letztes Mal werde ich erklären, bis ich es leid bin, Blöcke zu brechen. Nachdem wir den Widget-Baum konfiguriert haben, erklären wir diesmal, wie die platzierten Widgets relevant gemacht werden.

Load-to-Block-Pause - Lassen Sie uns eine Beziehung zwischen Widgets im Widget-Baum herstellen.

Welche Beziehung besteht nun überhaupt zwischen Widgets im Widget-Baum? Um ein einfaches Beispiel zu nennen: Wenn Sie eine Schaltfläche im Widget-Baum drücken, ändert sich ein anderes Widget (z. B. der Wert der Beschriftung) im Widget-Baum. Grundsätzlich konfigurieren wir eine GUI mit Funktionen im Ablauf von "Konfigurieren eines Widget-Baums mit verschiedenen Widgets ⇒ Herstellen von Beziehungen zwischen jedem Widget".

Stellen Sie eine Beziehung zum vorherigen Widget-Baum her

Verwenden wir nun den zuletzt erstellten Widget-Baum und bauen die Beziehung zwischen Widgets auf. Das Ergebnis und das konzeptionelle Diagramm des vorherigen Widget-Baums sind unten dargestellt. Versuchen wir diesmal, die auf label2 angezeigte Zahl durch Drücken von Taste1 (Kinder1) zu erhöhen und durch Drücken von Taste2 (Kinder2) zu verringern.

test.png

widget_tree1.png

Zahlen auf label2 anzeigen

Schreiben Sie zunächst die Build-Funktion der testApp-Klasse neu, um die Nummer auf label2 anzuzeigen. (Da wir später die Unterklassen plusButton und minusButton der Button-Klasse erstellen werden, haben wir die Instanziierung entsprechend geändert.)

python



class testApp(App):
	def build(self):
        #Generieren Sie Boxlayout, PlusButton, MinusButton, Label
		layout1 = BoxLayout(orientation='vertical')
		button1 = plusButton(text='children1')
		layout2 = BoxLayout(orientation='horizontal')
		label2 = Label()
		button2 = minusButton(text='children2')
        #Button2 und label2 als untergeordnete Widgets von layout2 hinzugefügt
		layout2.add_widget(button2)
		layout2.add_widget(label2)
		#Button1 und Layout2 als untergeordnete Widgets von Layout1 hinzugefügt
		layout1.add_widget(button1)
		layout1.add_widget(layout2)
		#Anzeige des Anfangswertes auf Label2
		label2.value = 100
		label2.text=str(label2.value)
		return layout1

Es ist fast dasselbe wie beim letzten Mal, aber der Anfangswert von 100 wird in dem variablen Wert gespeichert, der label2 zugewiesen wurde, und der Wert von value wird in label2 als Zeichenfolge angezeigt.

Ändern Sie den Wert von label2 jedes Mal, wenn Sie die Taste drücken

Als nächstes wird eine Beziehung zwischen Widgets erstellt, was das Miso dieser Zeit ist. Ich möchte den Wert von label2 durch Drücken von Button ändern, aber da simple Button keine solche Funktion hat, werde ich eine Unterklasse der Button-Klasse generieren und eine Funktion hinzufügen. Zu diesem Zeitpunkt ist die relative Position im Widget-Baum wichtig. Das Folgende ist der Teil der Unterklassengenerierung.

python


#Erhöhen Sie die Anzahl von label2, wenn Sie die Taste drücken
class plusButton(Button):
    def on_press(self):
		#Festlegen der Position von label2 bei Betrachtung über button1
        label = self.parent.children[0].children[0]
		#Änderung des Etikettenwerts und der Anzeige
        label.value = label.value+1
        label.text = str(label.value)

#Verringern Sie die Anzahl von label2, wenn Sie die Taste drücken
class minusButton(Button):
    def on_press(self):
		#Festlegen der Position von label2 bei Betrachtung über button2
		#Beachten Sie den Unterschied zu den oben genannten
        label = self.parent.children[0]
		#Änderung des Etikettenwerts und der Anzeige
        label.value = label.value-1
        label.text = str(label.value)

Grundsätzlich ist on_press, das das Verhalten beim Drücken der Taste darstellt, so definiert, dass es sich wie gewünscht verhält. Diesmal besteht der Zweck jedoch darin, den Wert von label2 zu ändern. Daher muss label2 während on_press aufgerufen werden. Hier benötigen wir die relative Positionsbeziehung innerhalb des Widget-Baums. Wenn Sie sich das obige Programm genau ansehen, können Sie sehen, dass label2 aufgerufen und angewiesen wird, den Wert des Werts aus der Positionsbeziehung zu ändern, wenn Sie ihn über die Plus- und Minus-Taste (Selbst) betrachten. (Siehe Abbildung unten)

widget_tree2.png

widget_tree3.png

Auf diese Weise kann das übergeordnete Widget oben im Widgetbaum vom übergeordneten Widget und das untergeordnete Widget unten vom untergeordneten Widget angegeben werden. Da untergeordnete Elemente im Listenformat vorliegen, können einzelne untergeordnete Widgets durch numerische Werte angegeben werden.

Die endgültige Form. Lassen Sie uns den Wert von label2 ändern

Ich bin bereit. Lassen Sie uns zusammenfassen, was wir bisher getan haben, und den Wert von label2 ändern. Das gesamte Programm und das Ausführungsergebnis sind wie folgt.

main.py



from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

#Erhöhen Sie die Anzahl von label2, wenn Sie die Taste drücken
class plusButton(Button):
    def on_press(self):
		#Festlegen der Position von label2 bei Betrachtung über button1
        label = self.parent.children[0].children[0]
		#Änderung des Etikettenwerts und der Anzeige
        label.value = label.value+1
        label.text = str(label.value)

#Erhöhen Sie die Anzahl von label2, wenn Sie die Taste drücken
class minusButton(Button):
    def on_press(self):
		#Festlegen der Position von label2 bei Betrachtung über button2
		#Beachten Sie den Unterschied zu den oben genannten
        label = self.parent.children[0]
		#Änderung des Etikettenwerts und der Anzeige
        label.value = label.value-1
        label.text = str(label.value)

class testApp(App):
	def build(self):
        #Generieren Sie Boxlayout, PlusButton, MinusButton, Label
		layout1 = BoxLayout(orientation='vertical')
		button1 = plusButton(text='children1')
		layout2 = BoxLayout(orientation='horizontal')
		label2 = Label()
		button2 = minusButton(text='children2')
        #Button2 und label2 als untergeordnete Widgets von layout2 hinzugefügt
		layout2.add_widget(button2)
		layout2.add_widget(label2)
		#Button1 und Layout2 als untergeordnete Widgets von Layout1 hinzugefügt
		layout1.add_widget(button1)
		layout1.add_widget(layout2)
		#Anzeige des Anfangswertes auf Label2
		label2.value = 100
		label2.text=str(label2.value)
		return layout1

testApp().run()

Die Zahl unten rechts (Beschriftung 2) des Startbildschirms lautet 100 widget_tree4.png

Der Wert unten rechts (Beschriftung 2) ändert sich bei jedem Drücken der einzelnen Tasten. widget_tree5.png

Zusammenfassung

Dieses Mal haben wir durch Aufrufen anderer Widgets von der relativen Position des Widgetbaums aus die Beziehung zwischen den Widgets hergestellt und die GUI-Funktion hergestellt. Wenn Sie das wissen, können Sie einen einfachen Computer erstellen. Nächstes Mal werde ich über Ereignisse oder die KV-Sprache sprechen. Bis zum nächsten Mal!

Referenzen / Web

Kazuya Haraguchi (2018) "Praktische Python-Bibliothek Kivy-Programmierung - Multi-Tap-App mit Python -" Mikio Kubo, Asakura Shoten 254-12896-3 /) https://kivy.org/#home

Recommended Posts

Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ②
Eine Geschichte über einen Amateur, der mit Python (Kivy) einen Blockbruch macht ①
Die Geschichte, mit Python eine Hanon-ähnliche Partitur zu machen
Eine Geschichte über das Ausprobieren eines (Golang +) Python-Monorepo mit Bazel
Ich habe versucht, einen x86-Bootloader zu erstellen, der vmlinux mit Rust booten kann
Eine Geschichte über die Installation von matplotlib mit pip mit einem Fehler
Eine Geschichte über das zufällige Erstellen eines kurzen Songs mit Sudachi Py
Eine Geschichte über einen Python-Anfänger, der mit dem No-Modul'http.server 'feststeckt.
Eine Geschichte über das Hinzufügen einer REST-API zu einem mit Python erstellten Daemon
Die Geschichte, einen Standardtreiber für db mit Python zu erstellen.
Eine Geschichte über die Entwicklung eines weichen Typs mit Firestore + Python + OpenAPI + Typescript
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Eine Geschichte über maschinelles Lernen mit Kyasuket
Eine Geschichte über Python Pop und Append
Die Geschichte, wie man mit Python einen 100-Yen-Frühstücks-Bot für die Universität macht
[Python3] Eine Geschichte, die bei der Zeitzonenkonvertierung steckt
Eine Geschichte über die Implementierung eines Anmeldebildschirms mit Django
Eine Geschichte über das Ausführen von Python auf PHP auf Heroku
Eine Geschichte über das Ändern von Python und das Hinzufügen von Funktionen
Die Geschichte, ein Tool zum Laden von Bildern mit Python zu erstellen ⇒ Speichern unter
Eine Geschichte zum Erstellen einer IDE-Umgebung mit WinPython unter einem alten Windows-Betriebssystem.
Automatisches Zakuzaku, Bitcoin. Eine Geschichte über einen Python-Anfänger, der ein 1-Minuten-Diagramm für Münzprüfungen erstellt
Eine Geschichte über einen Programmier-Amateur der Freien Künste, der eine Grundprüfung zur Python3-Ingenieurzertifizierung erhält
Geschichte der Verwendung von Resonas Software-Token mit 1Password
Die Geschichte, wie theano mit TSUBAME 2.0 verwaltet wurde
Ein Memo zum Erstellen einer Django (Python) -Anwendung mit Docker
Eine Geschichte über einen Fehler beim Laden eines TensorFlow-Modells, das lokal mit Google Colab erstellt wurde
[Python] Eine Geschichte über das Erstellen eines LINE-Bots mit einer praktischen bemannten Funktion ohne Verwendung von Salesforce [Messaging-API]
Ein Hinweis zum Aufrufen der Facebook-API mit dem Python SDK
So konvertieren Sie mit Python [Anwendung] von einem Array in ein Wörterbuch
Eine Geschichte darüber, wie man einen relativen Pfad in Python angibt.
Ein Ei mit Python erstellen
Eine Geschichte über den Wettbewerb mit einem Freund in Othello AI Preparation
Stolpern Geschichte mit Python-Array
Die Geschichte, einen PyPI-Cache-Server (mit Docker) aufzubauen und mich wieder ein wenig glücklich zu machen
Memorandum über Korrelation [Python]
[Hinweis] Eine Geschichte über den Versuch, eine Klassenmethode mit zwei Unterbalken in der Python 3-Serie zu überschreiben.
Machen Sie eine Lotterie mit Python
Eine Geschichte über den Umgang mit dem CORS-Problem
Maschinelles Lernen Eine Geschichte über Menschen, die mit GBDT in GBDT in Python nicht vertraut sind
Eine Geschichte über einen Krieg, als zwei Neuankömmlinge eine App entwickelten
Ein Memorandum über den Python-Mock
[Python Kivy] So erstellen Sie mit pyinstaller eine exe-Datei
Automatisieren Sie die Sushi-Herstellung mit Python
Erstellen Sie ein Verzeichnis mit Python
Eine Geschichte über den Versuch, private Variablen in Python zu implementieren.
Drehen Sie ein Array von Zeichenfolgen mit einer for-Anweisung (Python3).
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Ein Hinweis zu [Python] __debug__
[Python, Selenium, PhantomJS] Eine Geschichte beim Scrapen einer Website mit fauler Last
Versuchen Sie, mit Python3 eine Zeichenfolge aus einem Bild zu extrahieren
[Python] Ich habe einen Bildbetrachter mit einer einfachen Sortierfunktion erstellt.
Eine Geschichte über den Versuch, mehrere Python-Versionen auszuführen (Mac Edition)
[Python] Was ist eine with-Anweisung?
Schneiden Sie ein Bild mit Python aus