Ist es möglich, on_dropfile
in mehreren Objekten zu binden? Oder ist es immer nur eine Bindung?kivy on_dropfile mehrfache Bindungen
Ich habe decalred Klasse
class dropFile(Label):
def __init__(self, **kwargs):
super(dropFile, self).__init__(**kwargs)
Window.bind(mouse_pos=lambda w, p: setattr(helper, 'mpos', p))
Window.bind(on_dropfile=self.on_dropfile)
def on_dropfile(self, *args):
print ("ding")
if (self.center_x - self.width/2 < helper.mpos[0] < self.center_x + self.width/2 and
self.center_x - self.height/2 < helper.mpos[1] < self.center_y + self.height/2):
print('dong')
self.text = str(args[1])
und in kv ich es nur als
verwendendropFile:
text: "Please drop file1"
dropFile:
text: "Please drop file2"
Aber nur auf dem ersten Feld funktioniert (es sieht nur Dateien, die auf die fallen gelassen werden " Bitte drop file1 "Feld, in anderen Fall erhält es einen Tropfen, aber nicht zu bestätigen, dass es in Grenzen des zweiten Feldes ist, als ob es nur die on_dropfile
Funktion des ersten Objekts bindet.
Gibt es eine elegante Möglichkeit, es für mehrere Objekte zu implementieren?
Danke für die Antwort. Ich weiß, wie Klassen funktionieren. Helfer ist nur ein leerer 'Klassenhelfer', um die Mausposition zu halten, ich habe die Zeile 'Window.bind (mouse_pos = lambda w, p: setattr (helper, 'mpos', p))' später zur Hauptklasse verschoben auf, so wird es nicht mehrfach ausgeführt. Und es funktioniert nicht wie 'on_release', weil' on_dropfile' ein Fenster-Event ist und leider kein Widget-Event und ich kann es nicht von kv binden, da es Exceptions auslöst. Ich bin zu PyQt umgezogen, da es besser für Desktop-Apps geeignet scheint (Kivy könnte sagen, es ist für alle, aber für mobile Geräte optimiert). Aber die Frage ist immer noch gültig – sanki
@sanki Ich habe es bearbeitet, so dass es funktioniert – KeyWeeUsr
Danke, für die neue Bearbeitung, das scheint viel besser zu funktionieren :-) – sanki