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.
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".
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.
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.
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)
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.
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
Der Wert unten rechts (Beschriftung 2) ändert sich bei jedem Drücken der einzelnen Tasten.
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!
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