]> git.saurik.com Git - wxWidgets.git/blob - wxPython/wx/py/PyShell.py
"wxWindows" --> "wxWidgets"
[wxWidgets.git] / wxPython / wx / py / PyShell.py
1 """PyShell is a python shell application."""
2
3 # The next two lines, and the other code below that makes use of
4 # ``__main__`` and ``original``, serve the purpose of cleaning up the
5 # main namespace to look as much as possible like the regular Python
6 # shell environment.
7 import __main__
8 original = __main__.__dict__.keys()
9
10 __author__ = "Patrick K. O'Brien <pobrien@orbtech.com>"
11 __cvsid__ = "$Id$"
12 __revision__ = "$Revision$"[11:-2]
13
14 import wx
15
16 class App(wx.App):
17 """PyShell standalone application."""
18
19 def OnInit(self):
20 import wx
21 from wx import py
22 wx.InitAllImageHandlers()
23 self.frame = py.shell.ShellFrame()
24 self.frame.SetSize((750, 525))
25 self.frame.Show()
26 self.SetTopWindow(self.frame)
27 self.frame.shell.SetFocus()
28 return True
29
30 '''
31 The main() function needs to handle being imported, such as with the
32 pyshell script that wxPython installs:
33
34 #!/usr/bin/env python
35
36 from wx.py.PyShell import main
37 main()
38 '''
39
40 def main():
41 """The main function for the PyShell program."""
42 # Cleanup the main namespace, leaving the App class.
43 import __main__
44 md = __main__.__dict__
45 keepers = original
46 keepers.append('App')
47 for key in md.keys():
48 if key not in keepers:
49 del md[key]
50 # Create an application instance.
51 app = App(0)
52 # Cleanup the main namespace some more.
53 if md.has_key('App') and md['App'] is App:
54 del md['App']
55 if md.has_key('__main__') and md['__main__'] is __main__:
56 del md['__main__']
57 # Mimic the contents of the standard Python shell's sys.path.
58 import sys
59 if sys.path[0]:
60 sys.path[0] = ''
61 # Add the application object to the sys module's namespace.
62 # This allows a shell user to do:
63 # >>> import sys
64 # >>> sys.app.whatever
65 sys.app = app
66 del sys
67 # Start the wxPython event loop.
68 app.MainLoop()
69
70 if __name__ == '__main__':
71 main()