Une histoire sur un amateur faisant une rupture de bloc avec python (kivy) ②

Synopsis trop approximatif

À 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.

Pause de chargement à bloc - Établissons une relation entre les widgets dans l'arborescence des widgets -

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».

Établissez une relation avec l'arborescence de widgets précédente

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).

test.png

widget_tree1.png

Afficher les numéros sur l'étiquette2

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.

Changez la valeur de label2 chaque fois que vous appuyez sur le bouton

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)

widget_tree2.png

widget_tree3.png

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.

La forme finale. Changeons la valeur de label2

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 widget_tree4.png

La valeur en bas à droite (étiquette 2) change chaque fois que vous appuyez sur chaque bouton. widget_tree5.png

Résumé

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!

Références / web

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

Une histoire sur un amateur faisant une rupture de bloc avec python (kivy) ②
Une histoire sur un amateur faisant une rupture de bloc avec python (kivy) ①
L'histoire de la création d'une partition de type Hanon avec Python
Une histoire d'essayer un monorepo (Golang +) Python avec Bazel
J'ai essayé de créer un chargeur de démarrage x86 qui peut démarrer vmlinux avec Rust
Une histoire sur l'installation de matplotlib à l'aide de pip avec une erreur
Une histoire sur la création d'une courte chanson par hasard avec Sudachi Py
Une histoire à propos d'un débutant en python coincé avec aucun module nommé'ttp.server '
Une histoire sur l'ajout d'une API REST à un démon créé avec Python
L'histoire de la création d'un pilote standard pour db avec python.
Une histoire sur le développement d'un type logiciel avec Firestore + Python + OpenAPI + Typescript
L'histoire de la création d'un module qui ignore le courrier avec python
Une histoire sur l'apprentissage automatique avec Kyasuket
Une histoire sur Python pop and append
L'histoire de la création d'un robot LINE pour le petit-déjeuner d'une université de 100 yens avec Python
[Python3] Une histoire bloquée avec la conversion du fuseau horaire
Une histoire sur l'implémentation d'un écran de connexion avec django
Une histoire sur l'exécution de Python sur PHP sur Heroku
Une histoire sur la modification de Python et l'ajout de fonctions
L'histoire de la création d'un outil pour charger une image avec Python ⇒ l'enregistrer sous un autre nom
Une histoire sur la création d'un environnement IDE avec WinPython sur un ancien système d'exploitation Windows.
Zakuzaku automatique, Bitcoin. Une histoire sur un débutant en Python faisant un tableau de contrôle de pièces en 1 minute
Une histoire sur un amateur de programmation d'arts libéraux qui obtient un examen de base de certification d'ingénieur Python3
Histoire de l'utilisation du jeton logiciel de Resona avec 1Password
L'histoire de la gestion de theano avec TSUBAME 2.0
Un mémo sur la création d'une application Django (Python) avec Docker
Une histoire sur une erreur lors du chargement d'un modèle TensorFlow créé avec Google Colab localement
[Python] Une histoire sur la création d'un bot LINE avec une fonction humaine pratique sans utiliser Salesforce [API de messagerie]
Une note sur l'utilisation de l'API Facebook avec le SDK Python
Comment convertir un tableau en dictionnaire avec Python [Application]
Une histoire sur la façon de spécifier un chemin relatif en python.
Créer un œuf avec python
Une histoire de compétition avec un ami dans Othello AI Preparation
Histoire de trébucher avec le tableau Python
L'histoire de la construction d'un serveur de cache PyPI (avec Docker) et de me rendre un peu heureux à nouveau
Mémorandum sur la corrélation [Python]
[Note] Une histoire sur la tentative de remplacer une méthode de classe avec deux barres inférieures dans la série Python 3.
Faites une loterie avec Python
Une histoire sur la façon de traiter le problème CORS
Apprentissage automatique Une histoire sur des personnes qui ne sont pas familiarisées avec GBDT utilisant GBDT en Python
Une histoire sur une guerre lorsque deux nouveaux arrivants ont développé une application
Un mémorandum sur le simulacre de Python
[Python Kivy] Comment créer un fichier exe avec pyinstaller
Automatisez la fabrication des sushis avec Python
Créer un répertoire avec python
Une histoire sur la tentative d'implémentation de variables privées en Python.
Tourner un tableau de chaînes avec une instruction for (Python3)
L'histoire de la création d'un bot de boîte à questions avec discord.py
Une note sur [python] __debug__
[Python, Selenium, PhantomJS] Une histoire lors de la capture d'un site Web avec une charge paresseuse
Essayez d'extraire une chaîne de caractères d'une image avec Python3
[Python] J'ai créé une visionneuse d'images avec une fonction de tri simple.
Une histoire sur la tentative d'exécuter plusieurs versions de Python (édition Mac)
[Python] Qu'est-ce qu'une instruction with?
Découpez une image avec python