From: John H. <ec...@ya...> - 2007-06-25 06:40:46
|
> 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 |