Update: Note that the Python.NET described here is *not* a CLR implementation of Python. This is "regular" C Python. You drop the bridge DLLs into a Python folder, then import CLR
, and at that point have access to all the dotnet classes, events, etc. There's been some confusion of this with the more experimental IronPython, which is an all-new CLR implementation of Python and not ready for production use.
The VisualWorks Smalltalk dotnet bridge does not yet handle dotnet events...
But registering for events in .NET was not part of the version 1 plan. It is extremely difficult and there is no solution whatsoever at the moment (AFAIK for any *-.NET bridge).
The problem is that you need to give .NET a delegate object to call (type safe callback) and that has to be part of the managed world. We are thinking about synthesizing such objects (their classes) and having an extra callback mechanism with dedicated marshaling
For the record, the very nice production quality Python.NET does support dotnet events in the manner described above. I have not looked at the code for how, but it is open source.
Here is an example of registering for a dotnet event in CPython...
def add_menu(self):
self.Menu = MainMenu()
self.tool_menu_item = MenuItem()
....
self.ellipse_tool_menu_item = MenuItem()
self.ellipse_tool_menu_item.Text = "Add &Ellipse"
self.tool_menu_item.MenuItems.Add(self.ellipse_tool_menu_item)
self.ellipse_tool_menu_item.Click += EventHandler(self.pick_ellipse)
....
def pick_ellipse(self, sender, args):
self.ellipse_tool_menu_item.Checked = True
self.canvas.current_tool(self.canvas.ellipse_tool)
....
No comments:
Post a Comment