fragez zu buttons

Fragen zu Tkinter.
Antworten
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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
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!
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Du hast auch global vergessen

Code: Alles auswählen

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

vielen Dank für die hilfe!
Antworten