Seite 1 von 1
Anfängerfrage
Verfasst: Freitag 28. November 2003, 19:20
von Hans-Dieter
Hallo,
Ich habe auch eine Frage zu Python und zwar wie ich per Button eine Funktion aufrufen kann?
Die Funktion schaut so aus:
Jetzt möchte ich per Button die Funktion aufrufen und zwar so:
Code: Alles auswählen
button = Button(root)
button["command"]=test("Testtext")
button.pack()
Nur so funktioniert das leider nicht.
Weiß vielleicht jemand wie das geht?
Verfasst: Freitag 28. November 2003, 19:43
von Dookie
Hi Hans-Dieter,
das geht so:
Code: Alles auswählen
button = Button(root)
button["command"]=lambda : test("Testtext")
button.pack()
wenn du nur test("Testtext") angibst, bekommt "command" einfach das Ergebnis der Funktion in dem Fall None zugewiesen und keine Referenz auf die Funktion.
Gruß
Dookie
Verfasst: Freitag 28. November 2003, 20:45
von Hans-Dieter
Vielen Dank Dookie, jetzt weiß ich auch endlich mal wie das geht

Verfasst: Samstag 29. November 2003, 13:10
von Hans-Dieter
So jetzt hätte ich aber noch eine andere Frage und zwar, wie ich mit einem Button zwei Funktionen aufrufen soll!
Also so:
Code: Alles auswählen
def test1():
print "1"
def test2():
print "2"
button = Button(root,command=test1,test2)
button.pack()
Ich hoffe ihr versteht was ich meine. Kann mir dabei jemand helfen?
Verfasst: Samstag 29. November 2003, 13:43
von Dookie
das geht im Prinzip wie bei Deinem ersten Problem allerdings mit einem kleinen Trick:
Code: Alles auswählen
button = Button(root,command=lambda : test1() or test2())
Das funktioniert, weil Deine Funktionen keinen Rückgabewert haben, also geben sie None zurück. None wird nun bei boolschen Operationen als False interpretiert und daher wird auch die 2. Funktion ausgeführt.
Im Allgemeinen ist es aber besser dafür extra eine Funktion zu definieren, welche dann die beiden Funktionen aufruft oder eine Funktion zu erstellen, welche dann eine Liste von Funktionen ausführen kann
Code: Alles auswählen
def caller(*args):
for f in args:
f()
...
button = Button(root,command=lambda : caller(test1, test2))
Gruß
Dookie