Seite 1 von 1

fragez zu buttons

Verfasst: Donnerstag 18. August 2005, 10:40
von morbiddorbid
hallo ich hab ne frage zu buttons: ich will das in einem gui nach buttondruck eine variable übergeben wird, die dann in der funktion verändert wird und wieder zurückgegeben wird.
das problem ist wenn ich die varieble in die funktion übergebe wartet der gar nicht auf meinen druck auf den button sondern führt die funktion einfach gleich aus und gibt aber am ende den wert nicht zurück! ich weiss nicht was ich da falsch mache - hier zur darstellung zweimalder code - leicht verändert:
1. hier wird keine variable übergeben -> die funktion wird erst nach knopfdruck ausgeführt
ich habe die variablen bereits drin - bloß nicht aktiviert/übergeben

Code: Alles auswählen

from Tkinter import *

def test():
    Label(root,text='Variable wird jetzt veraendert').pack()
    variable=2
    return variable

variable=1
root=Tk()
Button(root,text='Bla',command=test).pack()
root.mainloop()
print variable
2. jetzt aktiviere und übergebe ich die variablen:

Code: Alles auswählen

from Tkinter import *

def test(variable):
    Label(root,text='Variable wird jetzt veraendert').pack()
    variable=2
    return variable

variable=1
root=Tk()
Button(root,text='Bla',command=test(variable)).pack()
root.mainloop()
print variable
und das ist mein problem: wenn ich versuche zu übergeben und umzuschreiben und wieder zurückzugeben, dann wird die funtkion automtisch, nur ein mal ausgeführt und reagiert danach nicht mehr auf den button

Verfasst: Donnerstag 18. August 2005, 11:19
von mawe
Hi!

Das ist wohl der häufigste Stolperstein bei Tkinter :)
So gehts:

Code: Alles auswählen

Button(root, text="Bla", command=lambda: test(variable)).pack()
Gruß, mawe

Verfasst: Donnerstag 18. August 2005, 11:31
von moriddorbid
das erste problem ist behoben! danke!
allerdings habe ich das problem, dass die variablenveränderung in der funktion nicht wieder mit zurück ins hauptprogramm gegeben wird!
am anfang ist die variable definiert als 1 in der funtkion als 2 und am ende wieder 1 ...
ich will sie aber in der funtkion rückwirkend auf das hauptprogramm umstellen!

Verfasst: Freitag 19. August 2005, 00:12
von Joghurt
Du hast auch global vergessen

Code: Alles auswählen

GlobaleVar = 42
def foo():
    global GlobaleVar
    GlobaleVar += 1

Verfasst: Freitag 19. August 2005, 14:04
von morbiddorbid
vielen Dank für die hilfe!