2017-09-14 1 views
1

Lorsque vous faites référence à un élément kivy dans un kv, pourquoi les variables ne peuvent-elles pas être utilisées?Problèmes référençant des éléments dans un kv avec kivy

self.ids.top_left.background_normal = "x.png" 

cela fonctionne bien tandis que « top_left » est directement un ID dans le fichier kv et références « de x.png » directement à une image. Mais quand je dis quelque chose comme:

button_pressed = top_left 
picture_touse = "x.png" 
self.ids.button_pressed.background_normal = picture_touse 

alors il casse et me donne une erreur:

AttributeError: 'super' object has no attribute '__getattr__' 

Comment puis-je faire référence à un élément kv en utilisant des références générées?

+0

D'ailleurs, je l'ai déjà essayé d'utiliser [] crochets autour de la réponse On me dit que cela peut résoudre le problème en faisant une recherche __dict, mais avec des crochets, j'obtiens une erreur de syntaxe pointant vers la première parenthèse, ce qui n'est pas accepté par python. J'ai aussi essayé de restreindre le type en ajoutant str (top_left) par exemple pour m'assurer qu'il est traité comme une chaîne, mais il n'y a pas de changement. – Rayne

+0

génial, les variables peuvent être utilisées !, Je dois le rendre explicite ici (et il devrait aller dans le titre/question) afin que Google trouvera ceci et les réponses –

Répondre

0

Nevermind, vient de trouver la réponse, pour tous ceux qui veulent le faire, il suffit de créer:

check_ref = {}

(appeler ce que vous voulez) puis quand se référant à un ID appeler avant de mettre le reste de l'info entre crochets, comme:

self.ids.check_ref[button_pressed].background_normal = check_ref[picture_touse] 
1

Depuis endroits Kivy tous les widgets marqués id dans un propety de type dictionnaire. Par conséquent, vous pouvez le référencer en utilisant dict [clé]. La solution consiste à remplacer

self.ids.button_pressed.background_normal = picture_touse 

avec

self.ids[button_pressed].background_normal = picture_touse 

Snippet

class ScreenTwo(Screen, Widget): 

    def methodforbuttonpress(self, button_pressed): 
     kivy_logo = "kivy-logo-black-64.png" 
     self.ids[button_pressed].background_normal = kivy_logo 

Sortie

enter image description here

+0

l'utilisation de variables pour les ID ou ID, génial –