Tkinter, StringVar and dict

James Stroud jstroud at mbi.ucla.edu
Wed Dec 20 20:14:14 EST 2006


Kevin Walzer wrote:
> I'm trying to manage user preferences in a Tkinter application by 
> initializing some values that can then be configured from a GUI. The 
> values are set up as a dict, like so:
> 
>   self.prefs= {
>             'interface': '-en1',
>             'verbose': '-v',
>             'fontname': 'Courier',
>             'point': 12,
>             }
> 
> To link these values to the appropriate Tkinter variables, I'm using 
> code like this:
> 
>  self.prefs['interface'] = StringVar()
>  self.prefs['interface'].set("-en0") # initialize
> 
> This raises an error in Tkinter:
> 
> Exception in Tkinter callback
> Traceback (most recent call last):
>   File 
> "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk/Tkinter.py", 
> line 1403, in __call__
>     return self.func(*args)
>   File "/Users/kevin/Programming/packetstream/packetstream-classes.py", 
> line 293, in setPrefs
>     self.prefs['interface'] = StringVar()
>   File 
> "/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/lib-tk/Tkinter.py", 
> line 3237, in __setitem__
>     self.tk.call(self.name, 'configure', '-'+key, value)
> TclError: unknown option "-interface"
> 
> Can someone help me smooth this out--to get dict key-values into a 
> Tkinter variable like StringVar()?
> 
> Thanks.
> 

Actually, even more succinctly:

# somewhere in self
defaults = {
              'interface' : '-en1',
              'verbose'   : '-v',
              'fontname'  : 'Courier',
              'point'     : 12
             }
self.prefs = dict((d,StringVar(value=v)) for (d,v) in defaults.items())

James

-- 
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

http://www.jamesstroud.com/



More information about the Python-list mailing list