Using StringVars in List of Dictionaries as tkInter variables for Scale and Label widgets
seanacais
kccnospam at glenevin.com
Mon May 19 14:56:52 EDT 2008
On May 19, 2:11 pm, Peter Otten <__pete... at web.de> wrote:
>
> There's some magic going on behind the scene which means that you have to
> create a Tkinter.Tk instance before you can start churning out StringVars:
>
> >>> import Tkinter as tk
> >>> v = tk.StringVar()
>
> Traceback (most recent call last):
> File "<stdin>", line 1, in <module>
> File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 257, in __init__
> Variable.__init__(self, master, value, name)
> File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 188, in __init__
> self._tk = master.tk
> AttributeError: 'NoneType' object has no attribute 'tk'>>> root = tk.Tk()
> >>> v = tk.StringVar()
> >>> v.set(42)
> >>> v.get()
>
> '42'
>
> Peter
I had the Tkinter import as
from Tkinter import * but I changed it to
import Tkinter as tk
and modified the creation of the root object to
root=tk.Tk()
I then had to change every instance of Menu, Label,
Button, and all Tkinter elements to be prefaced by
tk. (so Button became tk.Button). That kind of makes
sense to me.
However even after specifying StringVar is a tk type
def initOPValues(self, OPname, dname):
OPDefaults = {
'Vval' : 0,
'Ival' : 0,
'Otemp' : 0
}
dname = dict((d,tk.StringVar()) for d in OPDefaults)
for d in OPDefaults:
dname[d].set(OPDefaults[d])
I still get a very similar error message
C:\Code\gui>tkinter.py
Traceback (most recent call last):
File "C:\Code\gui\tkinter.py", line 169, in <module>
ps.initOPValues(c, OPValues[c])
File "C:\Code\gui\tkinter.py", line 54, in initOPValues
dname = dict((d,tk.StringVar()) for d in OPDefaults)
File "C:\Code\gui\tkinter.py", line 54, in <genexpr>
dname = dict((d,tk.StringVar()) for d in OPDefaults)
File "C:\Python25\lib\lib-tk\Tkinter.py", line 254, in __init__
Variable.__init__(self, master, value, name)
File "C:\Python25\lib\lib-tk\Tkinter.py", line 185, in __init__
self._tk = master.tk
AttributeError: 'NoneType' object has no attribute 'tk'
Exception exceptions.AttributeError: "StringVar instance has no
attribute '_tk'"
in <bound method StringVar.__del__ of <Tkinter.StringVar instance at
0x00B7E418>> ignored
Thanks!
Kevin
More information about the Python-list
mailing list