Ich habe eine Anzahl von X Button. Der Text dieser Button ist von 1-x durchnummerriert. Wenn jetzt der User auf einen Button klickt, soll die Nummer des geklickten Buttons ausgegeben werden.
Wie mache ich das?
Welcher Button würde gedrückt?
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Zum Beispiel so:
Gruß, mawe
Zum Beispiel so:
Code: Alles auswählen
from Tkinter import *
def click(text):
print "Button Nr. %s wurde gedrueckt" % text
root = Tk()
for i in range(10):
Button(text=i,command=lambda text=i: click(text)).pack()
root.mainloop()
Vielen Dank, es funktioniert. Doch ich kann es noch nicht ganz nachvollziehen. Besonders diesen Teil:mawe hat geschrieben:Hi!
Zum Beispiel so:Gruß, maweCode: Alles auswählen
from Tkinter import * def click(text): print "Button Nr. %s wurde gedrueckt" % text root = Tk() for i in range(10): Button(text=i,command=lambda text=i: click(text)).pack() root.mainloop()
... command=lambda text=i: click(text) ...
Was bedeutet denn genau lambda?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
lambda ist ein Schlüsselwort zum definieren von anonymen Funktionen. Damit kannst du Funktionen erstellen, die keinen Namen brauchen.Gast5555 hat geschrieben:Was bedeutet denn genau lambda?
Dafür hast du hier eine anonyme Funktion mit Namen.
Code: Alles auswählen
x = lambda x: x + x
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Naja, Leonidas war wieder mal schneller
Es wird ja gerade heftigst diskutiert, lambda, map und Konsorten aus Python zu verbannen. Da frag ich mich, wie würde man das Beispiel von Gast5555 ohne lambda machen?
Gruß, mawe
Naja, Leonidas war wieder mal schneller
Es wird ja gerade heftigst diskutiert, lambda, map und Konsorten aus Python zu verbannen. Da frag ich mich, wie würde man das Beispiel von Gast5555 ohne lambda machen?
Gruß, mawe
Genau, kann man das auch ohne dieses mir unbekannte lambda machen? Und wenn ja, wie?
Vielen Dank!
Vielen Dank!
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Die meisten einsetzziele von map, filter und co. wurden ja durch *args, **kwargs, LCs und Generator Expressions ersetzt.mawe hat geschrieben:Es wird ja gerade heftigst diskutiert, lambda, map und Konsorten aus Python zu verbannen.
Vermutlich geht das schon irgendwie... aber ich muss zugeben: auf die schnelle ist mir nix eingefallenmawe hat geschrieben:Da frag ich mich, wie würde man das Beispiel von Gast5555 ohne lambda machen?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi!
Hier mal was Guido v. R. dazu meint:
Gruß, mawe
Hier mal was Guido v. R. dazu meint:
Kann mir bitte jemand an einem Beispiel zeigen, was genau genau ein state-carrying object ist.GvR hat geschrieben: Why drop lambda?
...
Tkinter callbacks come to mind, but I find that more often than not the callbacks should be methods of some state-carrying object anyway (the exception being toy programs).
Gruß, mawe
Jedes Objekt mit Instanzvariablen ist "state-carrying". Also Objekte, die sich über Aufrufe hinweg einen Zustand merken, was bei Funktionen ja allgemein nicht der Fall ist und bei anonymen Funktionen schon gar nicht.
Mawes Beispiel ohne ``lambda`` würde man wohl am einfachsten mit einem Closure lösen:
Ist wahrscheinlich für die meisten Anfänger auch nicht verständlicher als die ``lambda``-Variante.
Mawes Beispiel ohne ``lambda`` würde man wohl am einfachsten mit einem Closure lösen:
Code: Alles auswählen
from Tkinter import *
def make_click(text):
def click():
print "Button Nr. %s wurde gedrueckt" % text
return click
root = Tk()
for i in range(10):
Button(text=i,command=make_click(i)).pack()
root.mainloop()
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
Hi Blackjack!
PS: Aha!-erlebnis? Is das Englisch?
Gruß, mawe
Mir gehts grad genauso. Cool! Good bye, lambdaGvR hat geschrieben: also, there is a widespread misunderstanding that lambda can do things that a nested function can't -- I still recall Laura Creighton's Aha!-erlebnis after I showed her there was no difference!
PS: Aha!-erlebnis? Is das Englisch?
Gruß, mawe