2016-12-15 5 views
0

Ich mache eine Art von Android-Lock-Ding auf Kivy, und um die Linie zu ziehen, muss ich die ID des Widgets die Maus ist auf, so dass ich eine ID assing zu jedem wie dies in der .kv Datei:aktuelle ID des Widgets auf Python/Kivy

ClickableImage: 
    id: one 
    source: 'button.png' 
    etc. 

und ich weiß, dass ich alle IDs bekommen (ich habe 9, natürlich), mit den

self.parent.ids.id 

oder

self.parent.ids['id'] 

aber gibt es eine Möglichkeit, die ID zu erhalten, in der sich die Maus befindet? oder der, auf den ich klicke? Ich habe eine Klasse für Beherrschbarkeit, so dass sie erkennt, wenn sie in ein Widget eingeht, aber ich weiß nicht wirklich, wie ich ihre Position erreichen oder ihre Quelle ändern soll. Gibt es eine:

self.parten.ids.current 

oder so etwas? Dank für die Hilfe

Antwort

2

Sie collide_widget oder collide_point und im Widget ein Verfahren verwenden, kann so eingestellt, dass eine Variable in der parent ändern wird, lassen Sie uns selected_widget sagen zu den aktuellen Widgets wie folgt aus:

if self.collide_point(*Window.mouse_pos): 
    self.parent.selected_widget = self # or its id 

Sie dann kann damit nichts anfangen. Vielleicht wäre es noch besser, wenn Sie Ihre Logik in das Widget selbst einfügen und dort direkt mit der Kollision umgehen. Offensichtlich müssen Sie eine Methode, die Sie mit dem obigen Block if erstellen, an ein Ereignis wie on_release oder on_press binden, also führen Sie die Methode aus, sonst wird es nichts tun.

Sie können auch ein behebbares Verhalten von this PR oder sogar von this Snippet erhalten.

Edit:

Bitte beachten Sie, dass die ID nicht

Welche self.ids.my_id.id == None und daher eigentlich bedeutet in der Widget-Instanz zur Verfügung stehen wird id bekommen Sie dies tun müssen:

def find(self, parent, widget): 
    for id, obj in parent.ids.items(): 
     if obj == widget: 
      print id 
      return id 
+0

Danke! Ich habe die Idee, aber ich erinnere mich, es gibt eine Möglichkeit, Variablen von der Hauptklasse (App) zu bekommen, ich erklärte es dort, und dann gab es eine Methode wie ".get_running_App" oder so etwas .. (Ich kann Ich glaube auch nicht, dass die Dokumentation sehr klar ist, denke ich). Hast du eine Chance, dass du weißt, wovon ich rede? – gramsch

+0

'self.app = App.get_running_app()' höchstwahrscheinlich in '__init__' Methode und dann können Sie alles von' App' Klasse im Grunde über 'self.app bekommen. ' – KeyWeeUsr

+0

Das einzige, was ich brauche, ist, um die ID der aktuellen ID die Maus ist zu bekommen, denn wenn ich Self oder self.id drucke, bekomme ich nur <__ main __. ClickableImage Objekt bei 0x7fa671a713d0>, oder None, Wie kann ich die ID des aktuellen Widgets erhalten, auf dem ich bin? Also kann ich es auf eine Variable in App übertragen und damit arbeiten – gramsch

Verwandte Themen