##// END OF EJS Templates
Fix traceback on exit.
Fix traceback on exit.

File last commit:

r1488:348ed0c2
r1489:46a76184
Show More
ipythonx.py
103 lines | 2.9 KiB | text/x-python | PythonLexer
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 """
Entry point for a simple application giving a graphical frontend to
ipython.
"""
gvaroquaux
Helpful error message if trying to run the ipythonx entry point without...
r1477 try:
import wx
except ImportError, e:
e.message = """%s
________________________________________________________________________________
You need wxPython to run this application.
""" % e.message
e.args = (e.message, ) + e.args[1:]
raise e
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 from wx_frontend import WxController
Gael Varoquaux
First cut of subprocess execution with redirection of stdin/stdout.
r1437 import __builtin__
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391
Gael Varoquaux
Fixed a race-condition in subprocess execution....
r1438 class IPythonXController(WxController):
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 """ Sub class of WxController that adds some application-specific
bindings.
"""
gvaroquaux
Clean up the test application for the wx frontend.
r1475 debug = False
Gael Varoquaux
Proper redirection of keystrokes to subprocesses.
r1450
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 def __init__(self, *args, **kwargs):
WxController.__init__(self, *args, **kwargs)
self.ipython0.ask_exit = self.do_exit
def _on_key_down(self, event, skip=True):
# Intercept Ctrl-D to quit
if event.KeyCode == ord('D') and event.ControlDown() and \
gvaroquaux
More code reuse between GUI-independant frontend and Wx frontend: getting...
r1462 self.input_buffer == '' and \
gvaroquaux
Make process execution work under windows.
r1449 self._input_state == 'readline':
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 wx.CallAfter(self.ask_exit)
else:
WxController._on_key_down(self, event, skip=skip)
def ask_exit(self):
""" Ask the user whether to exit.
"""
gvaroquaux
Fix segfaults under windows.
r1479 self._input_state = 'subprocess'
self.write('\n', refresh=False)
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 self.capture_output()
self.ipython0.shell.exit()
self.release_output()
if not self.ipython0.exit_now:
gvaroquaux
Fix segfaults under windows.
r1479 wx.CallAfter(self.new_prompt,
self.input_prompt_template.substitute(
Gael Varoquaux
More tests of the frontend. Improve the ease of testing.
r1458 number=self.last_result['number'] + 1))
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391
def do_exit(self):
""" Exits the interpreter, kills the windows.
"""
WxController.do_exit(self)
self.release_output()
Gael Varoquaux
Clean up exit code.
r1392 wx.CallAfter(wx.Exit)
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391
Gael Varoquaux
Fixed a race-condition in subprocess execution....
r1438 class IPythonX(wx.Frame):
""" Main frame of the IPythonX app.
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 """
gvaroquaux
Tweak the debug mode....
r1484 def __init__(self, parent, id, title, debug=False):
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 wx.Frame.__init__(self, parent, id, title, size=(300,250))
self._sizer = wx.BoxSizer(wx.VERTICAL)
gvaroquaux
Tweak the debug mode....
r1484 self.shell = IPythonXController(self, debug=debug)
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 self._sizer.Add(self.shell, 1, wx.EXPAND)
self.SetSizer(self._sizer)
self.SetAutoLayout(1)
self.Show(True)
def main():
gvaroquaux
Clean up the test application for the wx frontend.
r1475 from optparse import OptionParser
usage = """usage: %prog [options]
Simple graphical frontend to IPython, using WxWidgets."""
parser = OptionParser(usage=usage)
parser.add_option("-d", "--debug",
action="store_true", dest="debug", default=False,
help="Enable debug message for the wx frontend.")
options, args = parser.parse_args()
gvaroquaux
Fix segfaults under windows.
r1479 # Clear the options, to avoid having the ipython0 instance complain
import sys
sys.argv = sys.argv[:1]
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 app = wx.PySimpleApp()
gvaroquaux
Tweak the debug mode....
r1484 frame = IPythonX(None, wx.ID_ANY, 'IPythonX', debug=options.debug)
Gael Varoquaux
Add demo app. Add callback for exit to the ipython0 code.
r1391 frame.shell.SetFocus()
frame.shell.app = app
frame.SetSize((680, 460))
app.MainLoop()
if __name__ == '__main__':
main()