[Tutor] Lots of variables

Kent Johnson kent37 at tds.net
Sat Aug 6 19:47:57 CEST 2005


Øyvind wrote:
> Hello.
> 
> I am trying to write a gui that has a lot of checkboxes. It is over 200
> different ones. I use a for statement to generate:
> 
>         ver = 200
>         for i in ['Car','House','Boat','Plane']:
>             self.fra26_che01p = Checkbutton (self.fra26)
>             self.fra26_che01p.place(in_=self.fra26,x=5,y=ver)
>             self.fra26_che01p.configure(text=i)
>             self.getattr(self,i)1 = IntVar()
>             self.fra26_che01p.configure(variable=getattr(self,i))
>             self.fra26_che01v = Checkbutton (self.fra26)
>             self.fra26_che01v.place(in_=self.fra26,x=70,y=ver)
>             #self.fra26_che01v.configure(text="1p")
>             self.getattr(self,i)2 = IntVar()
>             self.fra26_che01v.configure(variable=getattr(self,i))
>             ver = ver + 17
> 
> The variable does not work for obvious reasons. I need to change variable
> for each new creation. If I had made the variables manually, I would have
> written (variable=self.car1)/(variable=self.car2) and so forth. Is there
> some way I can make lots of variables without declaring them up front?

The usual way to do this is to keep a dictionary mapping the 'variable' names to the values, or maybe just a list of the values. Since you access the checkbuttons through IntVars you may not need to keep a reference to the button itself. So maybe something like this:

        self.vars = {}
        ver = 200
        for i in ['Car','House','Boat','Plane']:
            check1 = Checkbutton (self.fra26)
            check1.place(in_=self.fra26,x=5,y=ver)
            check1.configure(text=i)
            var1 = self.vars[i+'1'] = IntVar()
            check1 .configure(variable=var1)
            check2 = Checkbutton (self.fra26)
            check2.place(in_=self.fra26,x=70,y=ver)
            var2 = self.vars[i+'2'] = IntVar()
            check2.configure(variable=var2)
            ver = ver + 17

Now self.vars will have entries for 'Car1', 'Car2', etc. whose values will be the corresponding IntVars.

Kent



More information about the Tutor mailing list