Hallo! Ich bin Python-Neuling und habe folgendes Problem: Bei einer Auflistung, die ich normal mit Labels aus tkinter bewerkstellige, platziere ich innerhalb einer for-Schleife Buttons, die einen bestimmten Eintrag der Liste löschen sollen. buttonLoeschen.append(Button(fenster, text="Löschen", command= lambda: loescheBt(i))) Das Problem ist, dass zum Zeitpunkt, wo ich den Button klicke, die for-Schleife natürlich fertig ist, sodass i (die Zählvariable der for-Schleife) dem Index des letzten Eintrages entspricht. Somit wird das letzte Element gelöscht, statt dem, wo der Button ist. Nun suche ich nach einer Möglichkeit, das "i" zu konservieren. Also der command soll das i fix behalten, das beim Erstellen des Buttons gültig war. Bitte um Hilfe. Danke!
Verstehe ich das Problem richtig? Eine for-Schleife erzeugt n Buttons. Der i-te Button soll (nachdem alle Buttons erzeugt wurden) das i-te Element aus einer Liste löschen.
Flo schrieb: > Verstehe ich das Problem richtig? > > Eine for-Schleife erzeugt n Buttons. Der i-te Button soll (nachdem alle > Buttons erzeugt wurden) das i-te Element aus einer Liste löschen. Genau richtig! sven schrieb: > Kann man nicht die ID oder Namen des Buttons abfragen? Die Buttons sind auch in einer Liste, man bräuchte also leider auch dafür die Variable i.
Du musst i beim Anlegen des lambdas binden: lamba i=i: loescheBit(i) Das bindet die variable beim Anlegen des lambdas über den Standartwert. Eine der wenigen hässlichen Stellen Pythons.
Vielleicht helfen auch die functools...
1 | # python |
2 | Python 2.7.13 (default, Nov 24 2017, 17:33:09) |
3 | [GCC 6.3.0 20170516] on linux2 |
4 | Type "help", "copyright", "credits" or "license" for more information. |
5 | >>> from __future__ import print_function |
6 | >>> import functools |
7 | >>> i=5 |
8 | >>> f = functools.partial(lambda x:print(x), i) |
9 | >>> f() |
10 | 5 |
11 | >>> i=9 |
12 | >>> f() |
13 | 5 |
Flof schrieb: > Du musst i beim Anlegen des lambdas binden: lamba i=i: loescheBit(i) > > Das bindet die variable beim Anlegen des lambdas über den Standartwert. > Eine der wenigen hässlichen Stellen Pythons. Funktioniert perfekt!! Vielen Dank!!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.