Seite 1 von 1
Lambda Rückgabe
Verfasst: Montag 11. April 2022, 15:57
von Boardgameingo
Ich habe eine Frage zu Lambda.
Mit folgender Zeile nehme ich x und y und schicke sie an eine Funktion, die mir den dest_name und die Werte zurückgeben soll. Als Fehler erhalte ich: ValueError: too many values to unpack (expected 3). Warum bekomme ich nicht nur die drei aus der Return Anweisung zurück und was bekomme ich statt dessen??
Vielen Dank vorab für eure Mühe!
x, y, dest_name = map_01.bind('<ButtonPress-1>', lambda e: self.catch_it (e.x, e.y) )
def catch_it(self,x ,y )
if 40 <= x < 240 and 0 <= y < 445 :
dest_name = 'loc_01'
...
return ( x,y, dest_name)
Re: Lambda Rückgabe
Verfasst: Montag 11. April 2022, 16:15
von __deets__
Wie stellst du dir das denn vor? Dein lambda soll doch bei Knopfdruck ausgefuehrt werden. Also lange, nachdem diese Zeile durchgelaufen ist. Wie also genau soll denn dann das return schon zu dem Zeitpunkt passieren, mit Ergebnissen aus einer fernen Zukunft?
Der Rueckgabewert von bind hingegen ist einfach None. Also kann man den auch nicht drei anderen Werten zuweisen.
Grundsaetzlich kann kein event-basiertes System sowas. Denn die Ereignisschleife laeuft ja irgendwo, nicht and den potentiell hunderten Stellen, an denen du Ereignis-Handler registriert hast.
Re: Lambda Rückgabe
Verfasst: Montag 11. April 2022, 16:40
von __blackjack__
Kleine aber nicht so wirklich wichtige Korrektur: `bind()` liefert eine Zeichenkette, darum auch „too many values to unpack“ die man mit `unbind()` verwenden kann um diese Bindung wieder aufzuheben. Das ändert aber nichts an dem was __deets__ zum Programmablauf/Zeitpunkt gesagt hat.
Re: Lambda Rückgabe
Verfasst: Dienstag 12. April 2022, 07:51
von Boardgameingo
OK, meine Lösung geht nicht. Gibts denn eine Alternative? Ich möchte, dass beim Knopfdruck der Wert gespeichert wird und ich ihn weiter verwenden kann. Der Wert soll sich aus dem Eventergebnis zu dem jeweiligen Zeitpunkt ergeben. Das muss doch machbar sein?!?
Genauer: ich möchte durch Klic auf eine Karte einen Ort festlegen (x,y Koordinate) und diese zwei Werte speichern, damit ich sie weiter verwenden kann..
Re: Lambda Rückgabe
Verfasst: Dienstag 12. April 2022, 07:56
von Dennis89
Hallo,
du kannst das "Ergebnis" an 'self' binden und somit wieder darauf zugreifen. Also zumindest in deinem Codeausschnitt steht 'self', dann geh ich davon aus das du eine Klasse verwendet hast?
Grüße
Dennis
Re: Lambda Rückgabe
Verfasst: Mittwoch 13. April 2022, 11:08
von Boardgameingo
Vielen Dank, ich komme damit weiter. .. Weiter zur nächsten Frage
Code: Alles auswählen
butt_go = tk.Button(frame_03) , text='Go - Drive to Destination', command=lambda : self.go_drive (day))
butt_go.grid(column=1, row=15, padx = 5, pady=5, sticky = 'w')
def go_drive (self, day):
self.destroy
self.window_03 = Window_03(day)
Ich möchte, dass sich das alte Fenster Windows_02 schließt und das neue sich öffnet. Leider ignoriert er den self.destroy Befehl. Woran kann das liegen?
BG
Ingo
Re: Lambda Rückgabe
Verfasst: Mittwoch 13. April 2022, 11:29
von peterpy
Re: Lambda Rückgabe
Verfasst: Mittwoch 13. April 2022, 11:52
von Boardgameingo
Danke