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)
Lambda Rückgabe
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.
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.
- __blackjack__
- User
- Beiträge: 13080
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 10
- Registriert: Dienstag 29. März 2022, 11:26
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..
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..
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
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
"When I got the music, I got a place to go" [Rancid, 1993]
-
- User
- Beiträge: 10
- Registriert: Dienstag 29. März 2022, 11:26
Vielen Dank, ich komme damit weiter. .. Weiter zur nächsten Frage
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
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)
BG
Ingo
Hallo Ingo,,
Gruss Peter
Code: Alles auswählen
self. Windows_02.destroy()