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