X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8b9a4190f70909de9568f45389e7aa3ecbc66b8a..52f52ebc4e0be6a9899d328b08db9eb14629d219:/wxPython/wx/py/PyShell.py?ds=sidebyside diff --git a/wxPython/wx/py/PyShell.py b/wxPython/wx/py/PyShell.py index 4babed4cc3..54cef8a71e 100644 --- a/wxPython/wx/py/PyShell.py +++ b/wxPython/wx/py/PyShell.py @@ -1,11 +1,71 @@ +"""PyShell is a python shell application.""" -"""Renamer stub: provides a way to drop the wx prefix from wxPython objects.""" +# The next two lines, and the other code below that makes use of +# ``__main__`` and ``original``, serve the purpose of cleaning up the +# main namespace to look as much as possible like the regular Python +# shell environment. +import __main__ +original = __main__.__dict__.keys() -from wx import _rename -from wxPython.py import PyShell -_rename(globals(), PyShell.__dict__, modulename='py.PyShell') -del PyShell -del _rename +__author__ = "Patrick K. O'Brien " +__cvsid__ = "$Id$" +__revision__ = "$Revision$"[11:-2] + +import wx + +class App(wx.App): + """PyShell standalone application.""" + + def OnInit(self): + import wx + wx.InitAllImageHandlers() + from shell import ShellFrame + self.frame = ShellFrame() + self.frame.SetSize((750, 525)) + self.frame.Show() + self.SetTopWindow(self.frame) + self.frame.shell.SetFocus() + return True + +''' +The main() function needs to handle being imported, such as with the +pyshell script that wxPython installs: + + #!/usr/bin/env python + + from wx.py.PyShell import main + main() +''' + +def main(): + """The main function for the PyShell program.""" + # Cleanup the main namespace, leaving the App class. + import __main__ + md = __main__.__dict__ + keepers = original + keepers.append('App') + for key in md.keys(): + if key not in keepers: + del md[key] + # Create an application instance. + app = App(0) + # Cleanup the main namespace some more. + if md.has_key('App') and md['App'] is App: + del md['App'] + if md.has_key('__main__') and md['__main__'] is __main__: + del md['__main__'] + # Mimic the contents of the standard Python shell's sys.path. + import sys + if sys.path[0]: + sys.path[0] = '' + # Add the application object to the sys module's namespace. + # This allows a shell user to do: + # >>> import sys + # >>> sys.app.whatever + sys.app = app + del sys + # Start the wxPython event loop. + app.MainLoop() if __name__ == '__main__': main()