Syntax Fehler aber wo?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
dahaze
User
Beiträge: 75
Registriert: Freitag 13. März 2009, 10:57
Wohnort: im Schwabenland

Versuchs mal so:

Code: Alles auswählen

self.QUIT = Tkitner.Button(self)
self.QUIT["text"] = "Herunterfahren"
self.QUIT["command"] = lambda :os.system('init 0')
oder am besten gleich:

Code: Alles auswählen

self.QUIT = Tkinter.Button(self, text='Herunterfahren', command=lambda :os.system('init 0'))
EDIT:
Tkinter will an dieser Stelle nur einen Pointer auf eine Funktion sehen und diese Funktion wird dann mit dem "Button-Click"-Event verbunden.
Schreibst du an dieser Stelle "os.system('init 0')" bindest du sozusagen nicht die Funktion an das Event sondern den Rückgabewert der Funktion. => Die Funktion wird bereits zu Beginn ausgeführt.

Bsp.:

Code: Alles auswählen

>>> def test():
... 	return 'Die Funktion wurde aufgerufen!'
... 
>>> a = test
>>> b = test()
>>> print a
<function test at 0x00E20808>
>>> print b
Die Funktion wurde aufgerufen!
>>> 
Gruß,
dahaze

EDIT2:
Da war ich wohl zu langsam mit meiner Erklärung! :D
Zuletzt geändert von dahaze am Freitag 5. März 2010, 12:43, insgesamt 2-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Vielleicht noch zum Verständnis. Mach dir mal den Unterschied klar:

Code: Alles auswählen

>>> def spam(eggs) : print eggs
...
>>> spam
<function spam at 0x2657848>
>>> spam("foo")
foo
Das Leben ist wie ein Tennisball.
conray
User
Beiträge: 20
Registriert: Donnerstag 4. März 2010, 22:39

Code: Alles auswählen

self.QUIT["command"] = lambda :os.system('init 0')
Das hats gebracht :)
Jetzt funktioniert alles so wie ich es wollte :)
Vielen Dank!
mfg
conray

PS @EyDu habs erst nach einigem Überlegen verstanden was dort passiert . Aber gut zu wissen für spätere scripte :) thx
Antworten