Anfängerfrage

Fragen zu Tkinter.
Antworten
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:

Code: Alles auswählen

def test(text):
     print text
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?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Hans-Dieter

Vielen Dank Dookie, jetzt weiß ich auch endlich mal wie das geht :D
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?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

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
Antworten