C Martin wrote: > What am I doing wrong in this code? The callback doesn't work from the Entry > widget. > > ##start code > import Tkinter > > tk = Tkinter.Tk() > var = Tkinter.StringVar() > print var._name > > def cb(name, index, mode): > print "callback called with name=%r, index=%r, mode=%r" % (name, index, > mode) > varValue = tk.getvar(name) > print " and variable value = %r" % varValue > > var.trace('w', cb) > > var.set('test') > entry = Tkinter.Entry(tk, textvariable=var) > entry.pack() > > tk.mainloop() > ##end code > > It produces the following output. The first three lines appear right away, > and the exception occurs when you type in the entry widget: > >>test.py > PY_VAR0 > callback called with name='PY_VAR0', index='', mode='w' > and variable value = 'test' > callback called with name='PY_VAR0', index='', mode='w' > Exception in Tkinter callback > Traceback (most recent call last): > File "C:\Python25\lib\lib-tk\Tkinter.py", line 1403, in __call__ > return self.func(*args) > File "D:\APCC\Projects\Utilities\VisualData\test.py", line 9, in cb > varValue = tk.getvar(name) > File "C:\Python25\lib\lib-tk\Tkinter.py", line 421, in getvar > return self.tk.getvar(name) > TclError: can't read "PY_VAR0": no such variable
A quick look in the Tkinter source reveals that you need tk.globalgetvar(), not tk.getvar(). I would actually recommend var.get(), so that you don't have to mess with these internals at all. Peter -- http://mail.python.org/mailman/listinfo/python-list