Re: Creating dynamic window

John Henry <[email protected]>
Newsgroups gmane.comp.python.pythoncard
Message-ID <[email protected]>
Oh, silly me.  Control_factory can be further
simplied:

def Control_factory(self, attribute, eventHandlers):
	name=attribute['name']
	for eventName in eventHandlers.keys():
		eventFct=eventHandlers[eventName]
		def function(self, background, event):
			if eventFct==None:
				return None
			return eventFct(self, event)
		function.name = "on_%s_%s" % (name,eventName)
		method = new.instancemethod(function, self,
self.__class__)
		setattr(self, function.name, method)
		self.addHandler(method)
	self.components[name] = attribute
	return function

--- John Henry <[email protected]> wrote:

> > Hmm, the code I sent to the list worked perfectly
> on
> > my machine. 
> 
> Don't you just love software development?
> 
> > Did  
> > you try and run the code as is? 
> 
> Yes I did.  Same failure.
> 
> > Which version of
> > Python are you  
> > using? 
> 
> Latest version of Python 2.3 under Windows XP w
> latest
> FP
> 
> >I was trying it with 2.4.3 on a Mac, but if
> > you're using 2.5  
> > maybe they added additional flags you're supposed
> to
> > use at the  
> > command-line so that Python doesn't give you a
> > warning?! I'm also a  
> > bit confused about the multiple args. I added the
> > line...
> > 
> > print "You clicked '%s'." % event.target.name
> > 
> > to show that the event being passed in is what
> we're
> > expecting and  
> > again on my box it works as expected.
> > 
> > ka
> > 
> > 
> 
> That part doesn't bother me.
> 
> Now, I've played around the idea more and I came up
> with a version that works in the general case - for
> all controls, and in-line with the resource
> structure
> of PythonCard.  See below:
> 
>     def addHandler(self, aMethod):
>         # Add the Handler to our Handler list.
>         if aMethod.name not in self._handlers:
>             log.debug("addHandler: " + aMethod.name)
>             #self._handlers[aMethod.name] =
> event.Handler(aMethod)
>             self._handlers[aMethod.name] = aMethod
> 
>     def Control_factory(self, attribute,
> eventHandlers):
> 	name=attribute['name']
> 	for eventName in eventHandlers.keys():
> 	    eventFct=eventHandlers[eventName]
> 	    def function(self, background, event):
> 		if eventFct==None:
> 		    return None
> 		return eventFct(self, event)
> 	    function.name = "on_%s_%s" % (name,eventName)
> 	    method = new.instancemethod(function, self,
> self.__class__)
> 	    setattr(self, function.name, method)
> 	    self.addHandler(method)
>         self.components[name] = {}
> 	for key in attribute.keys():
> 	    self.components[name][key]=attribute[key]
>         return function
>     
> 
> Now, everytime I need to create a control - any kind
> of  PythonCard controls, I simply do a:
> 
>         # This is my button mouseClick handler
>         def on_Button_mouseClick(self, event):
>                 return
> 
> Create a button:
> 
> 	Control_factory(self, attribute={"type":"Button",
> "name":"Button1",
> "label":"Button1","position":(5,35)},
> eventHandlers={"mouseClick":on_Button_mouseClick})
> 
> Notice that the attribute is a standard dictionary
> no
> different from that in the resource file.  
> 
> And it works for all controls.  Some form of this
> should exist in standard form of PythonCard.
> 
> --
> John Henry
> 


--
John Henry

-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.