Peter Otten
2008-01-08 08:21:32 UTC
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
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
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
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##start code
import Tkinter
tk = Tkinter.Tk()
var = Tkinter.StringVar()
print var._name
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
test.py
PY_VAR0callback 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
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
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