Creating a function to make checkbutton with information from a list?

Peter Otten __peter__ at web.de
Sun May 13 02:45:57 EDT 2007


Thomas Jansson wrote:

> Dear all
> 
> I am writing a program with tkinter where I have to create a lot of
> checkbuttons. They should have the same format but should have
> different names. My intention is to run the functions and the create
> all the buttons with the names from the list.
> 
> I now the lines below doesn't work, but this is what I have so far. I
> don't really know how call the element in the dict use in the for
> loop. I tried to call +'item'+ but this doesn't work.
> 
> def create_checkbox(self):
>    self.checkbutton = ["LNCOL", "LFORM", "LPOT", "LGRID",  "LERR",
> "LCOMP"]
>    for item in self.checkbutton:
>       self.+'item'+Checkbutton = Chekcbutton(frame, onvalue='t',
> offvalue='f', variable=self.+'item'+)
>       self.+'item'+Checkbutton.grid()
> 
> How should I do this?

You /could/ use setattr()/getattr(), but for a clean design putting the
buttons (or associated variables) into a dictionary is preferrable.

def create_checkbuttons(self):
    button_names = ["LNCOL", "LFORM", "LPOT", "LGRID",  "LERR", "LCOMP"]
    self.cbvalues = {}
    for row, name in enumerate(button_names):
        v = self.cbvalues[name] = IntVar()
        cb = Checkbutton(self.frame, variable=v)
        label = Label(self.frame, text=name)
        cb.grid(row=row, column=0)
        label.grid(row=row, column=1)

You can then find out a checkbutton's state with

self.cbvalues[name].get()

Peter



More information about the Python-list mailing list