seanacais wrote: > I'm trying to build an unknown number of repeating gui elements > dynamically so I need to store the variables in a list of > dictionaries. I understand that Scale "variable" name needs to be a > StringVar but I cannot figure out how to initialize the dictionary. > > I've tried the following code > > ps = PowerSupply() # Instantiate a Power Supply VM Object > numOPs = ps.getOnum() # Find the number of outputs > OPValues = [] # Global list to hold one dictionary per output > > for c in range(numOPs): > OPValues.append({ }) > ps.initOPValues(c, OPValues[c]) > > > > ps.initOPValues is defined as follows: > > def initOPValues(self, OPname, dname): > > OPDefaults = { > 'Vval' : 0, > 'Ival' : 0, > 'Otemp' : 0 > } > > dname = dict((d,StringVar()) for d in OPDefaults) > for d in OPDefaults: > dname[d].set(OPDefaults[d]) > > I get the following error: > > Traceback (most recent call last): > File "C:\Code\gui\tkinter.py", line 165, in <module> > ps.initOPValues(c, OPValues[c]) > File "C:\Code\gui\tkinter.py", line 47, i initOPValues > dname = dict((d,StringVar()) for d in OPDefaults) > File "C:\Code\gui\tkinter.py", line 47, in <genexpr> > dname = dict((d,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 > 0x00B7D468>> ignored > > Any help is appreciated!
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 -- http://mail.python.org/mailman/listinfo/python-list