Jouer avec l'implémentation de l'interface utilisateur Pythonista [Action implementation]

introduction

Je craignais de déplacer l'interface utilisateur créée avec Pythonista, je vais donc l'écrire sous forme d'article. Si vous regardez ici sans trop toucher à l'implémentation de l'interface utilisateur de Pythonista, vous devriez d'abord lire ce qui suit! Jouez avec l'implémentation de l'interface utilisateur de Pythonista3 [Super Super Introduction] Jouer avec l'implémentation de l'interface utilisateur Pythonista [Éléments d'écran]

Action Dans l'implémentation de l'interface utilisateur de Pythonista, chaque élément a un attribut appelé Action, qui vous permet de définir ce qui se passe lorsqu'un bouton est enfoncé (tapé ou cliqué), par exemple. C'est le cercle rouge.

Si vous spécifiez ici le nom de la fonction ou le nom de la méthode qui définit le processus, il sera appelé lorsque le bouton sera enfoncé. Le processus est décrit dans le fichier py correspondant à pyui.

ui_sample.py


import ui
import console

def button_clicked(sender):
	console.alert('Button1 clicked!')

v = ui.load_view()
v.present('sheet')

Sélectionnez Button1 dans sample_ui.pyui dans l'image ci-dessus et spécifiez button_clicked dans Action.

Quand je l'exécute et que j'appuie sur le bouton. .. .. Voilà pourquoi. Expliquons la source.

import ui
import console

En passant, le module console peut être utilisé pour la sortie de message, il est donc bon de s'en souvenir. C'est un module intégré de Pythonista.

def button_clicked(sender):
	console.alert('Button1 clicked!')

C'est le processus que vous souhaitez appeler lorsque vous appuyez sur le bouton. Assurez-vous de spécifier l'argument sender pour la fonction ou la méthode spécifiée dans Action. (Comme aucun argument ne peut être spécifié pour pyui, seul sender peut être spécifié.)

L'objet à partir duquel l'action est spécifiée est passé à sender. Dans ce cas, c'est un bouton.

Coordination des éléments à l'écran

L'interface utilisateur montrée dans l'image ci-dessus a non seulement des boutons mais également des champs de texte. Lorsque cela se produit, vous souhaitez récupérer la chaîne de caractères saisie dans le champ de texte du programme lorsque vous appuyez sur le bouton, non? C'est décidé d'être!

Les éléments placés dans la vue sont

v = ui.load_view()

Lorsque vous le faites, tout est chargé dans v. Pour récupérer des éléments de la valeur de retour de load_view (), spécifiez le nom de chaque élément comme clé de dictionnaire.

s = v['button1'].title
print(s)  #bouton1 titre("OK" dans l'exemple de la figure)Est imprimé.

C'est vrai. Essayez-le.

En passant, vous pouvez également définir la valeur en sens inverse par la méthode de spécification ci-dessus.

v = ui.load_view()

v['button1'].title = 'NG'  #Réglez le titre affiché sur le bouton avec pyui sur "OK"
## Je l'ai réglé, mais je l'ai réglé sur "NG"

v.present('sheet')         #Valeur définie avant de dessiner avec présent

Eh bien, vous avez peut-être remarqué un bon enfant, mais le v défini dans la partie principale du traitement ne peut pas être passé à la fonction Action de button1 qui prend uniquement sender comme argument. Cependant, vous pouvez extraire l'élément View de sender comme suit:

def button_clicked(sender):
	v = sender.superview     # superview: sender(button1)Élément parent de
	console.alert(v['textfield1'].text)

Puisque «button1» et «textfield1» sont placés dans le même CustomView, ils peuvent être obtenus en utilisant «superview» et en traçant le parent de «button1».

Classer la vue

Maintenant, j'ai pu organiser les éléments de l'écran. Une action peut également être mise en œuvre. essayons! J'ai donc créé un écran et implémenté Action pour tous les éléments ...

import ui

def button1_clicked(sender):
	#Processus 1

def button2_clicked(sender):
	#Processus 2

def button3_clicked(sender):
	#Processus 3

def button4_clicked(sender):
	#Processus 4

def button5_clicked(sender):
	#Processus 5

v = ui.load_view()
v.present('sheet')

comment c'est? N'est-il pas temps de vouloir classer en unités de vue (écran)?

Eh bien, à peu près, par exemple, comme ça

import ui

class CustomView1():
	def button1_clicked(sender):
		#Processus 1

	def button2_clicked(sender):
		#Processus 2
	...

v = ui.load_view()
v.present('sheet')

Pour Action du côté pyui, spécifiez également le nom de la classe et spécifiez-le comme CustomView1.button1_clicked.

Oh? Même s'il s'agit d'une méthode de la classe, l'argument self n'est pas spécifié. Cela ne fonctionnera que si vous le spécifiez. L'écriture de «self» ne contient que des objets qui couvrent «l'expéditeur». Vous ne pouvez pas en transmettre plus d'un, comme «self» et «sender».

Dans l'état actuel des choses, les variables de classe ne peuvent pas être utilisées, il s'agit donc simplement de les inclure.

Cependant, ce n'est pas grave si vous écrivez comme suit!

import ui

class CustomView1(object):
	def button1_clicked(self, sender):
		#Processus 1

	def button2_clicked(self, sender):
		#Processus 2
	...

v = ui.load_view()

cv = CustomView1()
v['button1'].action = cv.button1_clicked

v.present('sheet')

Spécifions directement la méthode à ʻaction` par la méthode d'accès à l'élément screen à partir de la source introduite précédemment. N'utilisez pas pyui pour spécifier «action».

en conclusion

Je n'ai abordé aucun traitement détaillé, mais c'est presque terminé! Ensuite, j'écrirai sur les transitions d'écran! !!

Recommended Posts

Jouer avec l'implémentation de l'interface utilisateur Pythonista [Action implementation]
Jouer avec l'implémentation de l'interface utilisateur de Pythonista [Éléments d'écran]
Ajustez le module ui de pythonista3
Jouez avec PyTorch
Jouez avec 2016-Python
Jouez avec CentOS 8
Jouez avec Pyramid
Jouez avec Fathom
Jouer avec Othello (Reversi)
Jouons avec les données Amedas - Partie 1
Jouez avec les notifications push avec imap4lib
Jouez avec les partitions Linux
Jouons avec les données Amedas - Partie 4
Jouer avec Jupyter Notebook (IPython Notebook)
[Python] Jouez avec le Webhook de Discord.
Transfert de fichiers bidirectionnel dans Pythonista 3
Jouons avec les données Amedas - Partie 3
Jouons avec les données Amedas - Partie 2
Jouez avec le module MD de ASE
Jouez avec A3RT (texte suggéré)