Hi Everybody,

Can someone please tell me how to pass a frame to other class method
I am able to pass the frame but when i pack some entry field..the window stops responding
here is my code

class InfoFrame:
    def addAttributeCriteria(self, parent = None, type = '', attrib = {}, cascade = True):
		print "called Info frame addattributecriteria"
		'''Description: If adding the first attribute frame this method will add the frame to parent and initialize self.growingFrame.
		All subsequent attribute frames will be added to self.growingFrame and will have a delete button.
		parent --> the parent frame of this attribute frame.
		type --> if filling in an attribute this is its component type (model, mesh, nodes, etc.)
		attrib --> dictionary with each attribute value keyed with its type
		cascade --> boolean value indicating whether or not this attribute applies to all child components
		return --> None
		'''
		#if parent is None then add the attribute to growingFrame and make a delete button.
		if parent == None:
			makeDeleteButton = True
			parent = self.growingFrame
		#end if
		#otherwise add root attribute to parent and do not make a delete button.
		else:
			makeDeleteButton = False
		#end else
		
		#make and add attribute group
		gp = Pmw.Group(parent, tag_text = 'Attribute')
		f = gp.interior()
		gp.pack(fill = 'x', expand = 1, padx = 4)
		
		topF = Frame(f)
		#make delete button and connect it to deleteAttributeCriteria
		deletebtn = Button(topF, image = self.blueminus, command = lambda :self.deleteAttributeCriteria(gp, topF),
			state = self.entryStates(), takefocus = 0)
		
		#make menu bar
		menuBar = Pmw.MenuBar(topF, hull_relief = 'raised',hull_borderwidth = 1)
		
		#assign root name to given type or just 'model'
		rootName = 'Model>'
		if type != '':
			rootName = MenuOptions[type] + Comp
		#end if
		
		#get our global MenuTree with all available components and assign our new root name
		global menuNames
		menuNames.name = rootName
		
		#create our attribute menu
		self.createMenu(menuBar, rootName, menuNames, rootName, topF)
		
		#disable menuBar if everything else is disabled (calling from RetreiveForm)
		if self.entryStates() == 'disabled':
			menuBar.disableall()
		#end if
		
		#create attribute component menu label
		attLabel = Label(topF, text = '  Component:', takefocus = 0)
		
		#create cascade select radiobutton
		attrib_cscd_radio = Pmw.RadioSelect(topF, buttontype = 'checkbutton')
		attrib_cscd_radio.add('Assign attribute to any child\nclasses, objects, or sub-objects',
			state = self.entryStates(), disabledforeground = 'black', takefocus = 0)
		
		#add delete button if this is not the root attribute frame
		if makeDeleteButton:
			deletebtn.grid(row = 0, column = 0, padx = 3, sticky = W)
		#end if
		
		#add the attribute component menu label, attribute component menu, and cascade radiobutton
		attLabel.grid(row = 0, column = 1, sticky = W)
		menuBar.grid(row = 0, column = 2, sticky = W)
		attrib_cscd_radio.grid(row = 0, column = 3, padx = 9, sticky = E)
		topF.columnconfigure(0, weight = 0, minsize = deletebtn.cget('width'))
		topF.columnconfigure(1, weight = 0)
		topF.columnconfigure(2, weight = 1)
		topF.columnconfigure(3, weight = 1)
		topF.pack(fill = 'x', expand = 1)
		#create and add frame to hold attribute values
		#save this attribute row
		self.attribRows[topF] = [rootName, attrib_cscd_radio, {}]
		
		#Create a cascading menu button for adding attribute types
		#get our global MenuTree with all available components and assign our new root name
		AttTypemenuBar = Pmw.MenuBar(topF, hull_relief = 'raised',hull_borderwidth = 1)
		aname = "Add Attribute Type"
		self.createAttTypeMenu(AttTypemenuBar, topF, aname = aname)
		AttTypemenuBar.grid(row = 1,column = 2, sticky = W)
		topF.pack(fill = 'x', expand = 1)
		
		#create each attribute entry field
		if attrib:
			for type,text in attrib:
				self.addattributeTypeCriteria(topF, type, text)
		#endif
		#invoke cascade select if specified
		if cascade:
			attrib_cscd_radio.invoke(0)
		#end if
		
		self.mainAttributeFrame.yview(mode = 'moveto', value = 1.0)
		
		#create our growingFrame for next time if this is the root attribute we are adding.
		if not hasattr(self, 'growingFrame'):
			self.growingFrame = Frame(parent)
			self.growingFrame.pack(fill = 'x', expand = 1)
	#end def addAttributeCriteria
	
	def addattributeTypeCriteria(self, cFrame, fieldtype, fieldtext):
		print "fieldtype is:",fieldtype
		print "fieldtext is:",fieldtext
		print "frame in attributetypecriteria is:",cFrame
		#create attribute type field label
		entry = Pmw.EntryField(cFrame, sticky = 'we', labelpos = 'w', label_text = fieldtype + ':',
				entry_width = 10, entry_disabledbackground = 'white', entry_disabledforeground = 'black')
		if fieldtext != '':
			entry.setvalue(fieldtext)
		self.attribRows[cFrame][2][fieldtype] = entry
		cFrame.pack(padx = 4, pady = 2, fill = 'both', expand = 1)
	#end def addattributeTypeCriteria
	def createAttTypeMenu(self, AttTypemenuBar, rFrame, aname):
		print "called Info frame createatttypemenu"
		'''Description:  adds menu nodes to a Pmw.MenuBar.
		AttTypemenuBar --> A Pmw.MenuBar to add children to
		parentName --> The parent of this component we are adding
		rootFrame --> parent frame of this menu
		return --> None
		'''
		print "frame in createatttypemenu is:",rFrame
		if aname == "Add Attribute Type":
			AttTypemenuBar.addmenu(aname, 'Click to add attribute type')
			for key in AttributeTypes.keys():
				AttTypemenuBar.addcascademenu(aname, key, traverseSpec = 'z', tearoff = 1)
				for skey in AttributeTypes[key]:
					if skey in SubAttributeTypes.keys():
						AttTypemenuBar.addcascademenu(key,PrettyAttTypes[skey],traverseSpec = 'z', tearoff = 1)
						for smkey in SubAttributeTypes[skey]:
							AttTypemenuBar.addmenuitem(PrettyAttTypes[skey], 'command', command = HandleTypeSelection(self, AttTypemenuBar, rFrame, PrettyAttTypes[smkey]) , label = PrettyAttTypes[smkey])
					else:
						AttTypemenuBar.addmenuitem(key,'command', command = HandleTypeSelection(self, AttTypemenuBar, rFrame, PrettyAttTypes[skey]), label = PrettyAttTypes[skey])
		else:
			print "yet to be implemented"
	#end def AttTypecreateMenu
class HandleTypeSelection:
	def __init__(self, sdf, AttTypemenuBar, refFrame, text):
		self.sdf = sdf
		self.AttTypemenuBar = AttTypemenuBar
		self.refFrame = refFrame
		print"freme in handletypeselection is:",refFrame
		self.text = text

	def __call__(self):
		print "Attribute Type Selected:", self.text
		print"frame in call in handletypeselection is:",self.refFrame
		self.sdf.addattributeTypeCriteria(self.refFrame, fieldtype = self.text, fieldtext = '')

I am new to python,please help me

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.