Seite 1 von 1

.trace error

Verfasst: Samstag 30. Mai 2015, 15:09
von Mr.101Freaking
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 :)

Re: .trace error

Verfasst: Samstag 30. Mai 2015, 15:14
von 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.

Re: .trace error

Verfasst: Samstag 30. Mai 2015, 15:37
von Mr.101Freaking
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

Re: .trace error

Verfasst: Samstag 30. Mai 2015, 15:43
von Sirius3
@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.

Re: .trace error

Verfasst: Samstag 30. Mai 2015, 16:17
von Mr.101Freaking
Vielen Dank :D
dann bastele ich jetzt mal weiter bis zum nächsten fehler ;)
MFG