Hi Jonathan, We have bug in IronPython that prevents static events to be set. Instance events work just fine, it is the static ones (like Application.Idle) that cause trouble. We have the bug on our radar already and hopefully will fix it soon.
Martin -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Jonathan Jacobs Sent: Wednesday, November 23, 2005 5:06 AM To: Discussion of IronPython Subject: [IronPython] Events and the += operator Hi, (I did a couple of searches on the archives and checked the bug tracker but still found nothing directly relating to this. Hopefully I didn't miss anything.) I'm having a problem trying to attach an event handler to System.Windows.Forms.Application.Idle: >>> System.Windows.Forms.Application.Idle <event# Idle on Application> >>> def _(sender, e): ... print 'Zzzz' ... >>> System.Windows.Forms.Application.Idle += _ Traceback (most recent call >>> last): at <shell> TypeError: can't set attributes of built-in/extension type 'System.Windows.Forms.Application' At first glance, it looks like this didn't work. However, creating a Form object and passing it to Application.Run does indeed print 'Zzzz' when idle. Stepping through the code indicates that InPlaceAdd mimics the C# += syntax for events (ie. attaches the event handler) and that AugAssignStmt always emits a "set", which correlates with CPython's behaviour as seen below (I'm not sure whether this is part of the Python specification or not, anyway): >>> l = ([], []) >>> l[0] += [1, 2] Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: object does not support item assignment It would seem that IronPython needs a more Pythonic (or less C#ish, if you prefer) way of doing this. In the meanwhile, one can get around it by either doing: >>> Application.Idle.__iadd__(_) or >>> try: >>> Application.Idle += _ >>> except TypeError: >>> pass Regards -- Jonathan When you meet a master swordsman, show him your sword. When you meet a man who is not a poet, do not show him your poem. -- Rinzai, ninth century Zen master _______________________________________________ users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com _______________________________________________ users mailing list [email protected] http://lists.ironpython.com/listinfo.cgi/users-ironpython.com
