À la suite de Dernière fois, je vais vous expliquer jusqu'à ce que je me lasse de casser des blocs. Maintenant que nous avons configuré l'arborescence des widgets, nous vous expliquerons cette fois comment rendre les widgets placés pertinents.
Maintenant, quelle est la relation entre les widgets dans l'arborescence des widgets en premier lieu? Pour donner un exemple simple, lorsque vous appuyez sur un bouton situé dans l'arborescence des widgets, un autre widget (par exemple, la valeur de l'étiquette) à l'intérieur de l'arborescence des widgets change. Fondamentalement, nous allons configurer une interface graphique avec des fonctions dans le flux de «configuration d'une arborescence de widgets à l'aide de divers widgets ⇒ établir des relations entre chaque widget».
Maintenant, utilisons l'arborescence des widgets créée la dernière fois telle quelle et construisons la relation entre les widgets. Le résultat et le diagramme conceptuel de l'arborescence des widgets précédente sont présentés ci-dessous. Cette fois, essayons d'augmenter le nombre affiché sur label2 en appuyant sur button1 (children1) et de le diminuer en appuyant sur button2 (children2).
Tout d'abord, réécrivez la fonction de génération de la classe testApp pour afficher le numéro sur label2. (Puisque nous créerons plus tard des sous-classes plusButton et minusButton de la classe Button, nous avons modifié l'instanciation pour les faire correspondre.)
python
class testApp(App):
def build(self):
#Générer Boxlayout, plusButton, minusButton, Label
layout1 = BoxLayout(orientation='vertical')
button1 = plusButton(text='children1')
layout2 = BoxLayout(orientation='horizontal')
label2 = Label()
button2 = minusButton(text='children2')
#Ajout de button2 et label2 en tant que widgets enfants de layout2
layout2.add_widget(button2)
layout2.add_widget(label2)
#Ajout de button1 et layout2 en tant que widgets enfants de layout1
layout1.add_widget(button1)
layout1.add_widget(layout2)
#Affichage de la valeur initiale sur Label2
label2.value = 100
label2.text=str(label2.value)
return layout1
C'est presque la même chose que la dernière fois, mais la valeur initiale de 100 est stockée dans la valeur de variable donnée à label2, et la valeur de value est affichée sous forme de chaîne de caractères dans label2.
Ensuite, il faut créer une relation entre les widgets, qui est le miso de cette époque. Je veux changer la valeur de label2 en appuyant sur Button, mais comme le simple Button n'a pas une telle fonction, je vais générer une sous-classe de la classe Button et ajouter une fonction. À ce stade, la position relative dans l'arborescence des widgets est importante. Ce qui suit est la partie de génération de sous-classes.
python
#Augmentez le nombre d'étiquettes2 lorsque vous appuyez sur le bouton
class plusButton(Button):
def on_press(self):
#Spécification de la position de l'étiquette2 lorsqu'elle est vue depuis le bouton1
label = self.parent.children[0].children[0]
#Changement de la valeur de l'étiquette et de l'affichage
label.value = label.value+1
label.text = str(label.value)
#Diminuez le nombre d'étiquettes2 lorsque vous appuyez sur le bouton
class minusButton(Button):
def on_press(self):
#Spécification de la position de l'étiquette2 lorsqu'elle est vue depuis le bouton2
#Notez la différence avec ce qui précède
label = self.parent.children[0]
#Changement de la valeur de l'étiquette et de l'affichage
label.value = label.value-1
label.text = str(label.value)
Fondamentalement, on_press, qui représente le comportement lorsque vous appuyez sur le bouton, est défini pour se comporter comme vous le souhaitez, mais cette fois le but est de changer la valeur de label2, il est donc nécessaire d'appeler label2 pendant on_press. Ici, nous avons besoin de la relation de position relative dans l'arborescence du widget. Si vous regardez attentivement le programme ci-dessus, vous pouvez voir que label2 est appelé et chargé de changer la valeur de la valeur de la relation de position lorsqu'elle est visualisée à partir du bouton plus et du bouton moins (soi). (Voir la figure ci-dessous)
De cette façon, le widget parent en haut de l'arborescence des widgets peut être spécifié par le parent, et le widget enfant en bas peut être spécifié par les enfants. De plus, comme les enfants sont au format liste, les widgets enfants individuels peuvent être spécifiés par des valeurs numériques.
Je suis prêt. Résumons ce que nous avons fait jusqu'à présent et modifions la valeur de label2. L'ensemble du programme et le résultat de l'exécution sont les suivants.
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
#Augmentez le nombre d'étiquettes2 lorsque vous appuyez sur le bouton
class plusButton(Button):
def on_press(self):
#Spécification de la position de l'étiquette2 lorsqu'elle est vue depuis le bouton1
label = self.parent.children[0].children[0]
#Changement de la valeur de l'étiquette et de l'affichage
label.value = label.value+1
label.text = str(label.value)
#Augmentez le nombre d'étiquettes2 lorsque vous appuyez sur le bouton
class minusButton(Button):
def on_press(self):
#Spécification de la position de l'étiquette2 lorsqu'elle est vue depuis le bouton2
#Notez la différence avec ce qui précède
label = self.parent.children[0]
#Changement de la valeur de l'étiquette et de l'affichage
label.value = label.value-1
label.text = str(label.value)
class testApp(App):
def build(self):
#Générer Boxlayout, plusButton, minusButton, Label
layout1 = BoxLayout(orientation='vertical')
button1 = plusButton(text='children1')
layout2 = BoxLayout(orientation='horizontal')
label2 = Label()
button2 = minusButton(text='children2')
#Ajout de button2 et label2 comme widgets enfants de layout2
layout2.add_widget(button2)
layout2.add_widget(label2)
#Ajout de button1 et layout2 en tant que widgets enfants de layout1
layout1.add_widget(button1)
layout1.add_widget(layout2)
#Affichage de la valeur initiale sur Label2
label2.value = 100
label2.text=str(label2.value)
return layout1
testApp().run()
Le nombre en bas à droite (étiquette 2) de l'écran initial est 100
La valeur en bas à droite (étiquette 2) change chaque fois que vous appuyez sur chaque bouton.
Cette fois, en appelant d'autres widgets à partir de la position relative de l'arborescence des widgets, nous avons fait la relation entre les widgets et fait fonctionner l'interface graphique. Si vous savez cela, vous pouvez créer un ordinateur simple. La prochaine fois, je parlerai d'événements ou de la langue KV. À la prochaine!
Kazuya Haraguchi (2018) "Programmation pratique de la bibliothèque Python Kivy -Application multi-tap réalisée avec Python-" Mikio Kubo, Asakura Shoten 254-12896-3 /) https://kivy.org/#home
Recommended Posts