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.
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».
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».
Je n'ai abordé aucun traitement détaillé, mais c'est presque terminé! Ensuite, j'écrirai sur les transitions d'écran! !!
Recommended Posts