2016-08-12 3 views
0

arbeiten Immer wenn ich versuche, meinen Code auszuführen, die ein bisschen wie folgt aussieht:Kann nicht tkinter der StringVar der Spur Methode erhalten

from tkinter import OptionMenu, StringVar, Tk 

class Foo(OptionMenu): 

    def __init__(self, master, options): 
     self.bar = StringVar() 
     self.bar.set(options[0]) 
     self.bar.trace("w", lambda: self.mouseCallback("foobar")) 
     super().__init__(master, self.bar, *options) 

    def mouseCallback(self, baz): 
     print(baz) 

def mainCycle(): 
    while True: 
     root.update() 

if __name__ == "__main__": 
    opts = ["A", "LONG", "LIST", "OF", "OPTIONS"] 
    root = Tk() 
    foobarbaz = Foo(root, opts) 
    foobarbaz.pack() 
    mainCycle() 

ich die folgende Fehlermeldung erhalten:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Program Files\Python35\lib\tkinter\__init__.py", line 1549, in __call__ 
    return self.func(*args) 
    File "C:\Program Files\Python35\lib\tkinter\__init__.py", line 3285, in __call__ 
    self.__var.set(self.__value) 
    File "C:\Program Files\Python35\lib\tkinter\__init__.py", line 260, in set 
    return self._tk.globalsetvar(self._name, value) 
_tkinter.TclError: can't set "PY_VAR0": 

Und selbst Nach viel "Stack Overflowing" kann ich es immer noch nicht zum Laufen bringen. Wie kann ich diesen Fehler vermeiden/beheben?

Antwort

3

Die Signatur der Callback-Funktion für StringVar.trace() soll so etwas wie def callback(*args) deshalb das Lambda Sie in StringVar.trace benutzen() soll geändert werden:

self.bar.trace("w", lambda *args: self.mouseCallback("foobar")) 
Verwandte Themen