Creating a function to make checkbutton with information from a list?
half.italian at gmail.com
half.italian at gmail.com
Sat May 12 15:45:24 EDT 2007
On May 12, 11:04 am, Thomas Jansson <tjansso... at gmail.com> 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?
>
> Kind regards
> Thomas Jansson
You can use exec("self." + name + " = " + value) to do what you want,
but then you need to exec() each time you want to access the
variable. I think it is much better to create a class.
Here's what I came up with:
from Tkinter import *
class Window(Frame):
def __init__(self, parent=None):
Frame.__init__(self,parent=None)
self.names = ["LNCOL", "LFORM", "LPOT", "LGRID", "LERR", "LCOMP",
"Sean"]
self.checkbuttons = []
self.f = Frame(root)
for name in self.names:
self.checkbuttons.append(CButton(parent=self.f, name=name,
default="f"))
self.f.pack(side="top",padx=5, pady=5)
class CButton(object):
def __init__(self, parent=None, name=None, default=None):
self.name = name
self.parent = parent
self.variable = StringVar()
self.variable.set(default)
self.checkbutton = None
self.create_checkbox(name)
def create_checkbox(self,name):
f = Frame(self.parent)
Label(f, text=name).pack(side="left")
self.checkbutton = Checkbutton(f, onvalue='t', offvalue='f',
variable=self.variable)
self.checkbutton.bind("<Button-1>", self.state_changed)
self.pack()
f.pack()
def pack(self):
self.checkbutton.pack()
def state_changed(self, event=None):
print "%s: %s" % (self.name, self.variable.get())
if __name__ == '__main__':
root = Tk()
Window().mainloop()
~Sean
More information about the Python-list
mailing list