[Tutor] Let imported module access calling program
Kent Johnson
kent37 at tds.net
Tue Mar 25 14:01:12 CET 2008
Shrutarshi Basu wrote:
> The event handling approach looks interesting and isn't something that
> I haven't encountered before. Could you to point me somewhere I could
> learn more about it?
Not really...this is commonly used by GUI frameworks. For example in
Tkinter you can register a mouse-button callback on a widget by calling
widget.bind('<Button-1>', callback)
where callback is the event handler.
http://www.pythonware.com/library/tkinter/introduction/events-and-bindings.htm
In your case, you would define the possible events and make a registry.
For example, the registry could be a dict mapping event name to a list
of handlers:
from collections import defaultdict
event_registry = defaultdict(list)
def register(event, handler):
# Should check that event is a real event name
event_registry[event].append(handler)
A client might call
register('sensor_front', handle_sensor_front)
Then in your main loop you check for the various events and call the
callbacks. Perhaps you have a dict mapping event names to functions that
query a condition:
events = dict(sensor_front = lambda: robot.sensor('front')
for event, query in events.items():
if query():
for handler in event_registry[event]:
handler()
This is simplistic - it needs error handling, a way to remove event
handlers and probably much more - but perhaps it will give you enough to
evaluate the idea.
Kent
More information about the Tutor
mailing list