2017-09-14 6 views
1

Wenn Sie auf ein Kivy-Objekt in einem KV verweisen, warum können Variablen nicht verwendet werden?Probleme beim Verweisen auf Objekte in einem KV mit Kivy

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

das funktioniert gut, während „top_left“ ist direkt eine ID in der kv-Datei und „x.png“ Referenzen direkt zu einem Bild. Aber wenn ich so etwas sagen wie:

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

dann bricht es und gibt mir eine Fehlermeldung:

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

wie kann ich auf einen kv siehe Punkt erzeugt Referenzen verwenden?

+0

By the way, habe ich bereits versucht mit [] eckigen Klammern um die Antwort ähm, mir wurde gesagt, dass dies das Problem lösen könnte, was es zu einem __dict-Lookup macht, aber mit eckigen Klammern bekomme ich einen Syntaxfehler, der auf die erste Klammer zeigt, also wird das von Python nicht akzeptiert. Ich habe auch versucht, den Typ, der str (top_left) hinzufügt, zu beschränken, um sicherzustellen, dass es als String behandelt wird, aber es gibt keine Änderung. – Rayne

+0

genial, Variablen können verwendet werden !, Ich muss es hier explizit machen (und es sollte in den Titel/Frage gehen), so dass Google diese und die Antworten –

Antwort

0

macht nichts, fand nur die Antwort, für alle, dies zu tun, nur schaffen:

check_ref = {}

(es nennt, was Sie wollen), dann, wenn es um eine ID nennen beziehen vor der Inbetriebnahme der Rest der Informationen in eckigen Klammern, wie:

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

Da Kivy Orte alle Widgets IDs in einem Wörterbuch Typ propety markiert. Daher können Sie mit dict [key] darauf verweisen. Die Lösung ist

zu ersetzen
self.ids.button_pressed.background_normal = picture_touse 

mit

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 

Ausgabe

enter image description here

+0

Verwendung von Variablen für IDs oder ID finden wird, genial –

Verwandte Themen