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