how to pass globals across modules (wxPython)
Peter Hansen
peter at engcorp.com
Mon Dec 20 05:01:05 EST 2004
Martin Drautzburg wrote:
> My wxPython program starts execution in mainFrame.py like this
> def main():
> global application
> application=MainApp(0)
> application.MainLoop()
>
> I need to access the "application" object from other modules, actually
> the windows and frames that live therein and I don't know how to do
> this.
>
> I tried using "global", but that does not seem to help. In the other
> module I run an "import mainFrame" and that seems to reset the global
> variables.
>
> Am I missing something obvious?
Not exactly obvious, perhaps, but well-defined. When you run
a Python script, the first script executed (the one specified
on the command line) is given the name __main__ in the list
of loaded modules (sys.modules, specifically). If you do an
"import mainFrame", you are actually loading a second copy
of the module into memory, under a different name.
The solution to your specific problem, without changing any
of the structure of your program, is to do "import __main__"
instead, but that's ultimately not likely the best solution.
One slightly better solution would be to create a special
empty module, just for holding "application globals" like
this, say "globals.py". Then you can import that in your
main script, and do "globals.application = MainApp(0)",
then import the same name elsewhere and work with it as you
are trying to.
An even better approach might be to find a way to avoid
having to access the main window through a global, but
I'll have to leave this up to you, as it may depend on
your program structure.
-Peter
More information about the Python-list
mailing list