Seite 1 von 1
def a(zahl)...
Verfasst: Montag 16. April 2007, 16:47
von Markus12
hi,
ich habe ein kleines problem.
Das ist der dazugehörige Code:
Code: Alles auswählen
from Tkinter import*
i=0
def a(zahl):
global i
i+=1
print i
hf=Tk()
frame=Frame(hf,width=300,height=300)
frame.pack()
button=Button(frame,text='+1',command=a(1))
button.place(x=10,y=10)
button2=Button(frame,text='+2',command=a(2))
button2.place(x=30,y=30)
-> Ich habe gerade bemerkt, dass "command=python()" und command=python ein Unterschied ist und das erste das komando gleich ausführt und das zweite nur passiert, wenn man auf den Button drückt.
Weiß jemand, wie man das hinkriegt, das man trotzdem die Methode wie im Beispiel verwendet (spart code) aber die definition erst aufgerufen wird, wenn man auf den Button drückt?
Danke

Verfasst: Montag 16. April 2007, 16:50
von Markus12
Ich weiß, dass es nicht die wunderbare Sache ist, es ohne eine klasse zu machen aber das sollte auch nur ein Versuch für ein richtiges Programm sein,
bei dem es eben dauernd gleich die definitionen ausgeführt hat und ich jetzt wissen wollte, woran das lag^^
Verfasst: Montag 16. April 2007, 18:35
von EyDu
Ich machs mal kurz:
wird zu:
oder auch:
Code: Alles auswählen
import functools
button=Button(frame,text='+1',command=functools.partial(a,1))
Verfasst: Montag 16. April 2007, 19:01
von Markus12
cool danke EyDu
lambda hab ich schonmal gehört, dachte es man könnte damit kleine Funktionen bauen? Was macht es hier genau? Könntest du mir das bitte erklären?

Und was macht das Modul functools?
Vielen Dank!

Verfasst: Montag 16. April 2007, 19:06
von Leonidas
Markus12 hat geschrieben:lambda hab ich schonmal gehört, dachte es man könnte damit kleine Funktionen bauen?
Das ist ja auch eine kleine Funktion. Es ist eine anonyme Funktion die keinen Namen hat, aber aufgerufen wird, wenn man auf den Button klickt.
Markus12 hat geschrieben:Und was macht das Modul functools?
Stellt ein paar Funktionen bereit, siehe
Doku. Dieser Ansatz macht mehr oder weniger das gleiche wie der Ansatz mit lambda.
Verfasst: Dienstag 17. April 2007, 18:34
von Markus12
Hi,
die functools methode ist für meine Verwendung besser! Lambda hat in meinem Speziellem Fall nicht funktioniert, aber functools schon:
Code: Alles auswählen
def button(zahl):
global string
string+=str(zahl)
buttonlist=[(0,60,230),(1,20,190),(2,60,190),(3,100,190),(4,20,150),(5,60,150),(6,100,150),(7,20,110),(8,60,110),(9,100,110)]
for zahl,k_x,k_y in buttonlist:
print zahl
BUTTONS=Button(frame,bg='DarkGreen',text=str(zahl),font=('Arial',10,'bold'),relief='ridge',width=2,command=functools.partial(button,zahl))
BUTTONS.place(x=k_x,y=k_y)
Das ^ soll button erzeugen, deren Informationen, die sich ändern, aus der Liste stammen. Mit "Lambda" hat das ganze nicht funktioniert, da bei jedem Mal, bei dem ich auf eine der zahlenbutton drückt, eine 9 hinzugefügt wird (der letzte der erzeugten button).