.trace error

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
Mr.101Freaking
User
Beiträge: 6
Registriert: Samstag 30. Mai 2015, 14:34

Bin seit Wochen auf der Suche nach der Lösung habe bisher aber noch nichts gefunden bitte um nachsicht falls ich zu blöd bin und die lösung vor meinen füßen liegt.

also zum problem:
der .trace produziert eine elllenlange fehlermeldung mit der ich als relativer neuling nichts anfangen kann.

die fehlermeldung:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args)
File "C:\Python34\lib\tkinter\__init__.py", line 3308, in __call__
self.__var.set(self.__value)
File "C:\Python34\lib\tkinter\__init__.py", line 263, in set
return self._tk.globalsetvar(self._name, value)
_tkinter.TclError: can't set "PY_VAR0":
Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args)
TypeError: 'NoneType' object is not callable

habe das ganze in einem testprog auf den .trace reduzieren können
hier das bischen prog

Code: Alles auswählen

from tkinter import *

OPTIONS = [
    "egg",
    "bunny",
    "chicken"
]

master = Tk()

variable = StringVar(master)
variable.set(OPTIONS[0])

w = OptionMenu (master, variable, *OPTIONS)
w.pack()

def cb():
    print("test")

variable.trace("w", cb())

mainloop()
danke schonmal für die antwort :)
BlackJack

@Mr.101Freaking: Du übergibst `None` als Rückruffunktion, weil das nämlicher der implizite Rückgabewert von `cb()` ist. Und wenn Tkinter dann versucht `None` aufzurufen kommt genau die Fehlermeldung die Du da siehst. Beim `trace()`-Aufruf möchtest Du die *Funktion* übergeben und nicht *aufrufen* und damit den *Rückgabewert* übergeben.
Mr.101Freaking
User
Beiträge: 6
Registriert: Samstag 30. Mai 2015, 14:34

danke für die schnelle antwort
jetzt muss ich aber trotzdem nochmal blöd nachfragen wenn ich jetzt alson nur .trace("w", cb) mache bekomme ich wieder eine fehlermeldung "TypeError: cb() takes 0 positional arguments but 3 were given"
LG
Sirius3
User
Beiträge: 17750
Registriert: Sonntag 21. Oktober 2012, 17:20

@Mr.101Freaking: Wenn die Callback-Funktion aufgerufen wird, wird sie mit drei Parametern (name, index, mode) aufgerufen. Da Deine Funktion aber keinen Parameter erwartet, gibt es einen Fehler.
Mr.101Freaking
User
Beiträge: 6
Registriert: Samstag 30. Mai 2015, 14:34

Vielen Dank :D
dann bastele ich jetzt mal weiter bis zum nächsten fehler ;)
MFG
Antworten