Anfängerfrage

Fragen zu Tkinter.
Hans-Dieter

Anfängerfrage

Beitragvon Hans-Dieter » Freitag 28. November 2003, 19:20

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

Beitragvon Dookie » Freitag 28. November 2003, 19:43

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

Beitragvon Hans-Dieter » Freitag 28. November 2003, 20:45

Vielen Dank Dookie, jetzt weiß ich auch endlich mal wie das geht :D
Hans-Dieter

Beitragvon Hans-Dieter » Samstag 29. November 2003, 13:10

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

Beitragvon Dookie » Samstag 29. November 2003, 13:43

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder