##// END OF EJS Templates
* Added Cut support to ConsoleWidget....
* Added Cut support to ConsoleWidget. * Added Raw Copy to FrontendWidget. * Minor cleanup

File last commit:

r2987:94057a1f
r2990:fe9fd791
Show More
ipythonqt.py
144 lines | 5.9 KiB | text/x-python | PythonLexer
epatters
Created a proper IPython script from the console frontend demo.
r2801 """ A minimal application using the Qt console-style IPython frontend.
epatters
* The SVG payload matplotlib backend now works....
r2758 """
epatters
* Moved shutdown_kernel method from FrontendWidget to KernelManager....
r2961 #-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
epatters
* The SVG payload matplotlib backend now works....
r2758 # Systemm library imports
Brian Granger
Merge branch 'newkernel' into upstream-newkernel...
r2873 from PyQt4 import QtGui
epatters
* The SVG payload matplotlib backend now works....
r2758
# Local imports
from IPython.external.argparse import ArgumentParser
epatters
Created a proper IPython script from the console frontend demo.
r2801 from IPython.frontend.qt.console.frontend_widget import FrontendWidget
from IPython.frontend.qt.console.ipython_widget import IPythonWidget
from IPython.frontend.qt.console.rich_ipython_widget import RichIPythonWidget
epatters
* The SVG payload matplotlib backend now works....
r2758 from IPython.frontend.qt.kernelmanager import QtKernelManager
epatters
* Moved shutdown_kernel method from FrontendWidget to KernelManager....
r2961 #-----------------------------------------------------------------------------
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 # Constants
epatters
* Moved shutdown_kernel method from FrontendWidget to KernelManager....
r2961 #-----------------------------------------------------------------------------
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 LOCALHOST = '127.0.0.1'
epatters
* Moved shutdown_kernel method from FrontendWidget to KernelManager....
r2961 #-----------------------------------------------------------------------------
# Classes
#-----------------------------------------------------------------------------
class MainWindow(QtGui.QMainWindow):
#---------------------------------------------------------------------------
# 'object' interface
#---------------------------------------------------------------------------
def __init__(self, frontend):
""" Create a MainWindow for the specified FrontendWidget.
"""
super(MainWindow, self).__init__()
self._frontend = frontend
self._frontend.exit_requested.connect(self.close)
self.setCentralWidget(frontend)
#---------------------------------------------------------------------------
# QWidget interface
#---------------------------------------------------------------------------
def closeEvent(self, event):
""" Reimplemented to prompt the user and close the kernel cleanly.
"""
epatters
Fixed the segfaults on application exit. The BracketMatcher, CallTipWidget, and CompletionWidget were using the text control as their parents. This should not be a problem, but for some reason it resulted in problems during shutdown. I suspect that PyQt is bugged and was deleting the C++ objects a second time in the garbage collection phase after they had already been deleted automatically by the C++ layer of Qt.
r2982 kernel_manager = self._frontend.kernel_manager
if kernel_manager and kernel_manager.channels_running:
title = self.window().windowTitle()
reply = QtGui.QMessageBox.question(self, title,
'Close console?', QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
kernel_manager.shutdown_kernel()
#kernel_manager.stop_channels()
event.accept()
else:
event.ignore()
epatters
* Moved shutdown_kernel method from FrontendWidget to KernelManager....
r2961
#-----------------------------------------------------------------------------
# Main entry point
#-----------------------------------------------------------------------------
epatters
* The SVG payload matplotlib backend now works....
r2758
def main():
epatters
Created a proper IPython script from the console frontend demo.
r2801 """ Entry point for application.
epatters
* The SVG payload matplotlib backend now works....
r2758 """
# Parse command line arguments.
parser = ArgumentParser()
epatters
Added option to ipythonqt.py for setting the paging style and grouped the options into kernel settings/widget settings.
r2871 kgroup = parser.add_argument_group('kernel options')
kgroup.add_argument('-e', '--existing', action='store_true',
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 help='connect to an existing kernel')
epatters
Added option to ipythonqt.py for setting the paging style and grouped the options into kernel settings/widget settings.
r2871 kgroup.add_argument('--ip', type=str, default=LOCALHOST,
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 help='set the kernel\'s IP address [default localhost]')
epatters
Added option to ipythonqt.py for setting the paging style and grouped the options into kernel settings/widget settings.
r2871 kgroup.add_argument('--xreq', type=int, metavar='PORT', default=0,
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 help='set the XREQ channel port [default random]')
epatters
Added option to ipythonqt.py for setting the paging style and grouped the options into kernel settings/widget settings.
r2871 kgroup.add_argument('--sub', type=int, metavar='PORT', default=0,
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 help='set the SUB channel port [default random]')
epatters
Added option to ipythonqt.py for setting the paging style and grouped the options into kernel settings/widget settings.
r2871 kgroup.add_argument('--rep', type=int, metavar='PORT', default=0,
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 help='set the REP channel port [default random]')
Brian Granger
Added heartbeat support.
r2910 kgroup.add_argument('--hb', type=int, metavar='PORT', default=0,
help='set the heartbeat port [default: random]')
epatters
* Fixed regression from last commit: syntax highlighting works robustly again....
r2866
epatters
Added option to ipythonqt.py for setting the paging style and grouped the options into kernel settings/widget settings.
r2871 egroup = kgroup.add_mutually_exclusive_group()
egroup.add_argument('--pure', action='store_true', help = \
'use a pure Python kernel instead of an IPython kernel')
Brian Granger
Merge branch 'newkernel' into upstream-newkernel...
r2873 egroup.add_argument('--pylab', type=str, metavar='GUI', nargs='?',
Brian Granger
GUI support for wx, qt and tk.
r2872 const='auto', help = \
epatters
* Added support for Ctrl-L per Fernando's request....
r2880 "Pre-load matplotlib and numpy for interactive use. If GUI is not \
given, the GUI backend is matplotlib's, otherwise use one of: \
['tk', 'gtk', 'qt', 'wx', 'payload-svg'].")
epatters
Added option to ipythonqt.py for setting the paging style and grouped the options into kernel settings/widget settings.
r2871
wgroup = parser.add_argument_group('widget options')
wgroup.add_argument('--paging', type=str, default='inside',
choices = ['inside', 'hsplit', 'vsplit', 'none'],
help='set the paging style [default inside]')
wgroup.add_argument('--rich', action='store_true',
help='enable rich text support')
epatters
Changed the default completion style to text. Text completion now uses the pager.
r2917 wgroup.add_argument('--gui-completion', action='store_true',
help='use a GUI widget for tab completion')
Brian Granger
Merge branch 'newkernel' into upstream-newkernel...
r2873
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 args = parser.parse_args()
Brian Granger
Merge branch 'newkernel' into upstream-newkernel...
r2873
epatters
* The SVG payload matplotlib backend now works....
r2758 # Don't let Qt or ZMQ swallow KeyboardInterupts.
import signal
signal.signal(signal.SIGINT, signal.SIG_DFL)
# Create a KernelManager and start a kernel.
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 kernel_manager = QtKernelManager(xreq_address=(args.ip, args.xreq),
sub_address=(args.ip, args.sub),
Brian Granger
Added heartbeat support.
r2910 rep_address=(args.ip, args.rep),
hb_address=(args.ip, args.hb))
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 if args.ip == LOCALHOST and not args.existing:
if args.pure:
kernel_manager.start_kernel(ipython=False)
elif args.pylab:
Fernando Perez
Add support for simultaneous interactive and inline matplotlib plots....
r2987 kernel_manager.start_kernel(pylab=args.pylab)
epatters
* The SVG payload matplotlib backend now works....
r2758 else:
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 kernel_manager.start_kernel()
epatters
* The SVG payload matplotlib backend now works....
r2758 kernel_manager.start_channels()
epatters
* Tab completion now uses the correct cursor position....
r2841 # Create the widget.
epatters
* The SVG payload matplotlib backend now works....
r2758 app = QtGui.QApplication([])
epatters
Added arguments to the Qt console frontend script for connecting to an existing kernel and for specifying an IP and specific ports.
r2823 if args.pure:
kind = 'rich' if args.rich else 'plain'
epatters
Added option to ipythonqt.py for setting the paging style and grouped the options into kernel settings/widget settings.
r2871 widget = FrontendWidget(kind=kind, paging=args.paging)
Fernando Perez
Add support for simultaneous interactive and inline matplotlib plots....
r2987 elif args.rich or args.pylab:
epatters
Added option to ipythonqt.py for setting the paging style and grouped the options into kernel settings/widget settings.
r2871 widget = RichIPythonWidget(paging=args.paging)
epatters
* The SVG payload matplotlib backend now works....
r2758 else:
epatters
Added option to ipythonqt.py for setting the paging style and grouped the options into kernel settings/widget settings.
r2871 widget = IPythonWidget(paging=args.paging)
epatters
Changed the default completion style to text. Text completion now uses the pager.
r2917 widget.gui_completion = args.gui_completion
epatters
* The SVG payload matplotlib backend now works....
r2758 widget.kernel_manager = kernel_manager
epatters
* Moved shutdown_kernel method from FrontendWidget to KernelManager....
r2961
# Create the main window.
window = MainWindow(widget)
window.setWindowTitle('Python' if args.pure else 'IPython')
window.show()
epatters
* Tab completion now uses the correct cursor position....
r2841
# Start the application main loop.
epatters
* The SVG payload matplotlib backend now works....
r2758 app.exec_()
if __name__ == '__main__':
main()