This ended up being weirder and more subtle than I realized... And possibly not an IP bug
I discovered that within the problematic scope, one module was using a variable with the same name as an imported module -- and within that narrow scope at least, was over-writing the namespace for the module. This may have been at the root of the problems I was experiencing -- import blah blah = 7 blah.someclass.somemethod(4) Is likely to cause an error since the "blah" namespace is actually an object, no? In my case it was subtle since the re-assignment would only happen when a certain combination of events occurred in a running program, only after the entire thing was up and running with all windows initialized and so forth, and only within certain parts of the program. I'm now re-revising my code to use "normal" global scopes again, and if it's all good, won't write about this issue any more ^_^;; Kb (*sometimes* missing rigid typing, heh) -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kevin Bjorke Sent: Thursday, June 29, 2006 4:52 PM To: Discussion of IronPython Subject: [IronPython] Python Module Scopes versus WinForms Event Handlers ===================== This message appears to be from an NVIDIA.COM e-mail address, yet did not originate from an NVIDIA server. Please be cautious of any attachments or links in this message. Thank you, NVIDIA IT Team. ===================== A typical idiom for a global value is to define it in some imported module, e.g. # config.py gVal = 3 And then all the other modules can import config And get/set the value by accessing "config.gVal" Unfortunately, this gets broken when using WinForms! It seems that in methods called as event handlers (or any methods called by those methods) that (in this case) "config.gVal" is not a valid attribute. For all other method contexts, "config.gVal" works perfectly. A global declared within the scope of the module containg the event handler CAN be used within the event handler, so my modules end up doing something like this: import config global gVal # ...and somewhere before any other code in the current mdule gets executed.... gVal = config.gVal ...so that event handlers can use the local-module "global" version. Obviously if the value of "config.gVal" changes a lot this would be an even huger hassle (fortunately, all I want is to maintain a globally-available pointer to my top-level app, which never changes once the app is initialized) ------------------------------------------------------------------------ ----------- This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. ------------------------------------------------------------------------ ----------- _______________________________________________ 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
