Re: Creating dynamic window

John Henry <[email protected]>
Newsgroups gmane.comp.python.pythoncard
Message-ID <[email protected]>
> 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

-------------------------------------------------------------------------
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.