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