Associate image name with list item

Peter Otten __peter__ at web.de
Tue Mar 27 02:16:57 EDT 2007


Kevin Walzer wrote:

> I'm trying to avoid a *lot* of typing in my Tkinter application by
> associating image names with items in a list. Here is my sample list:
> 
> self.catlist = [
>              'all', 'installed', 'base', 'crypto', 'database', 'devel',
>          'editors', 'games', 'gnome', 'graphics', 'kde', 'languages',
> 'libs', 'libs_perlmods',
>          'libs_pythonmods', 'libs_rubymods', 'net', 'sci', 'shells',
> 'sound', 'text', 'web',
>          'x11_system', 'x11-wm', 'x11'
>              ]
> 
> I've also already created a bunch of images with names that correspond
> to the list above, i.e. self.all, self.installed, and so on.  Here's the
> rest of my code:
> 
> for item in self.catlist:
>              print item
>              self.categorytable.insert(END, item)
> self.categorytable.cellconfigure("end,0", image=self.item)
> 
> This yields the following error:
> 
> AttributeError: item
> 
> because, of course, I don't actually have an image called self.item.
> 
> What I'm trying to do is get the value of the variable "item" and plug
> it into the image name, so that self.item actually corresponds to
> self.installed, self.base, etc. Trying something like
> 
> self.categorytable.cellconfigure("end,0", image=self.%s % item)
> 
> just yields a syntax error: SyntaxError: invalid syntax
> 
> Can anyone point me in the right direction?

The way you have framed your question the direct answer is

self.categorytable.cellconfigure("end,0", image=getattr(self, item))

but I think not making the images attributes and using a dictionary is the
superior approach. You avoid name clashes between image names and program
logic, and you can easily deal with image names that are not valid
attribute names (like 'x11-wm').

Peter




More information about the Python-list mailing list