コード例 #1
0
ファイル: shellwidget.py プロジェクト: rjcmarkelz/openalea
    def __init__(self, interpreter=None, message="", log='', parent=None):
        """
        :param interpreter : InteractiveInterpreter in which
        the code will be executed

        :param message: welcome message string

        :param  parent: specifies the parent widget.
        If no parent widget has been specified, it is possible to
        exit the interpreter by Ctrl-D.
        """
        if interpreter is None:
            from openalea.core.service.ipython import interpreter
            interpreter = interpreter()
        # Set interpreter
        self.interpreter = interpreter
        self.interpreter.widget = self

        # Multiple Stream Redirection
        GraphicalStreamRedirection.__init__(self)

        # Compatibility with visualea
        self.runsource = self.interpreter.run_cell
        self.runcode = self.interpreter.runcode
        self.loadcode = self.interpreter.loadcode

        # Write welcome message
        self.write(message)

        # Set kernel manager
        try:
            from IPython.qt.inprocess import QtInProcessKernelManager
        except ImportError:
            import warnings
            message = "You are using a deprecated version of IPython (please update)."
            warnings.warn(message)

            # DEPRECATED !
            from IPython.frontend.qt.inprocess_kernelmanager import QtInProcessKernelManager
            km = QtInProcessKernelManager(kernel=self.interpreter)
            km.start_channels()
            self.interpreter.frontends.append(km)
            self.kernel_manager = km
        else:
            km = QtInProcessKernelManager()
            km.kernel = self.interpreter
            km.kernel.gui = 'qt4'

            kernel_client = km.client()
            kernel_client.start_channels()

            self.kernel_manager = km
            self.kernel_client = kernel_client
コード例 #2
0
    def initialize(self):
        # Init your plugin
        self.misc_s = self.locator.get_service('misc')
        explorer_container = self.locator.get_service('explorer')
        tree = explorer_container.get_tree_projects()

        kernel_manager = QtInProcessKernelManager()
        kernel_manager.start_kernel()
        kernel = kernel_manager.kernel
        kernel.gui = 'qt4'

        kernel_client = kernel_manager.client()
        kernel_client.start_channels()

        def stop():
            kernel_client.stop_channels()
            kernel_manager.shutdown_kernel()

        self.ipython_console = RichIPythonWidget()
        self.ipython_console.kernel_manager = kernel_manager
        self.ipython_console.kernel_client = kernel_client
        self.ipython_console.exit_requested.connect(stop)
        self.ipython_console.show()

        self.misc_s.add_widget(self.ipython_console, IMAGES["console"],
                               "IPython console")
        addp = SIGNAL("addProjectToConsole(QString)")
        delp = SIGNAL("removeProjectFromConsole(QString)")
        self.connect(tree, addp, self._add_project)
        self.connect(tree, delp, self._del_project)
コード例 #3
0
def main():
    # Print the ID of the main process
    print_process_id()

    app = guisupport.get_app_qt4()

    # Create an in-process kernel
    # >>> print_process_id()
    # will print the same process ID as the main process
    kernel_manager = QtInProcessKernelManager()
    kernel_manager.start_kernel()
    kernel = kernel_manager.kernel
    kernel.gui = 'qt4'
    kernel.shell.push({'foo': 43, 'print_process_id': print_process_id})

    kernel_client = kernel_manager.client()
    kernel_client.start_channels()

    def stop():
        kernel_client.stop_channels()
        kernel_manager.shutdown_kernel()
        app.exit()

    control = RichIPythonWidget()
    control.kernel_manager = kernel_manager
    control.kernel_client = kernel_client
    control.exit_requested.connect(stop)
    control.show()

    guisupport.start_event_loop_qt4(app)
コード例 #4
0
ファイル: base_app.py プロジェクト: siddjakes/ScopeFoundry
    def setup_console_widget(self):
        # Console
        if CONSOLE_TYPE == 'pyqtgraph.console':
            self.console_widget = pyqtgraph.console.ConsoleWidget(
                namespace={
                    'app': self,
                    'pg': pg,
                    'np': np
                },
                text="ScopeFoundry Console")
        elif CONSOLE_TYPE == 'qtconsole':
            # https://github.com/ipython/ipython-in-depth/blob/master/examples/Embedding/inprocess_qtconsole.py
            self.kernel_manager = QtInProcessKernelManager()
            self.kernel_manager.start_kernel()
            self.kernel = self.kernel_manager.kernel
            self.kernel.gui = 'qt4'
            self.kernel.shell.push({'np': np, 'app': self})
            self.kernel_client = self.kernel_manager.client()
            self.kernel_client.start_channels()

            #self.console_widget = RichIPythonWidget()
            self.console_widget = RichJupyterWidget()
            self.console_widget.setWindowTitle("ScopeFoundry IPython Console")
            self.console_widget.kernel_manager = self.kernel_manager
            self.console_widget.kernel_client = self.kernel_client
        else:
            raise ValueError("CONSOLE_TYPE undefined")

        return self.console_widget
コード例 #5
0
def show_ipython_console():
    # from https://github.com/ipython/ipython/blob/1.x/examples/inprocess/embedded_qtconsole.py
    # this might be able to be a dockable panel at some point in the future.
    # it should also only allow one window open at a time - I think it steals stdout at start
    # and opening a new window stops output working on the old one!
    app = guisupport.get_app_qt4()

    # Create an in-process kernel
    # >>> print_process_id()
    # will print the same process ID as the main process
    kernel_manager = QtInProcessKernelManager()
    kernel_manager.start_kernel()
    kernel = kernel_manager.kernel
    kernel.gui = 'qt4'

    kernel_client = kernel_manager.client()
    kernel_client.start_channels()

    def stop():
        kernel_client.stop_channels()
        kernel_manager.shutdown_kernel()
        app.exit()

    control = RichIPythonWidget()
    control.kernel_manager = kernel_manager
    control.kernel_client = kernel_client
    control.exit_requested.connect(stop)
    control.show()

    guisupport.start_event_loop_qt4(app)
コード例 #6
0
    def __init__(self, *args, **kw):
        super(MantidIPythonWidget, self).__init__(*args, **kw)

        # Create an in-process kernel
        kernel_manager = QtInProcessKernelManager()
        kernel_manager.start_kernel()
        kernel = kernel_manager.kernel
        kernel.gui = 'qt4'

        # Figure out the full path to the mantidplotrc.py file and then %run it
        from os import path
        mantidplotpath = path.split(
            path.dirname(__file__))[0]  # It's the directory above this one
        mantidplotrc = path.join(mantidplotpath, 'mantidplotrc.py')
        shell = kernel.shell
        shell.run_line_magic('run', mantidplotrc)

        # These 3 lines replace the run_code method of IPython's InteractiveShell class (of which the
        # shell variable is a derived instance) with our method defined above. The original method
        # is renamed so that we can call it from within the our_run_code method.
        f = shell.run_code
        shell.run_code = types.MethodType(our_run_code, shell)
        shell.ipython_run_code = f

        kernel_client = kernel_manager.client()
        kernel_client.start_channels()

        self.kernel_manager = kernel_manager
        self.kernel_client = kernel_client
コード例 #7
0
	def __init__(self, main_window):

		"""
		desc:
			Constructor.

		arguments:
			main_window:	The main window object.
		"""

		super(ipython_console, self).__init__(main_window)
		kernel_manager = QtInProcessKernelManager()
		kernel_manager.start_kernel()
		self.kernel = kernel_manager.kernel
		self.kernel.gui = 'qt4'
		self.kernel.shell.banner1 = ''
		kernel_client = kernel_manager.client()
		kernel_client.start_channels()
		self.control = RichIPythonWidget()
		self.control.banner = self.banner()
		self.control.kernel_manager = kernel_manager
		self.control.kernel_client = kernel_client
		self.verticalLayout = QtGui.QVBoxLayout(self)
		self.verticalLayout.setContentsMargins(0,0,0,0)
		self.setLayout(self.verticalLayout)
		self.verticalLayout.addWidget(self.control)
コード例 #8
0
def in_process_console(console_class=RichIPythonWidget, **kwargs):
    """Create a console widget, connected to an in-process Kernel

    This only works on IPython v 0.13 and above

    Parameters
    ----------
    console_class : The class of the console widget to create
    kwargs : Extra variables to put into the namespace
    """

    km = QtInProcessKernelManager()
    km.start_kernel()

    kernel = km.kernel
    kernel.gui = 'qt4'

    client = km.client()
    client.start_channels()

    control = console_class()
    control.kernel_manager = km
    control.kernel_client = client
    control.shell = kernel.shell
    control.shell.user_ns.update(**kwargs)
    return control
コード例 #9
0
def main():

    #LETS ALSO DO SOME IPYTHOPN PARRALLEL STUFF

    global splicer
    app = guisupport.get_app_qt4()
    from LZM100 import splicer
    # Create an in-process kernel
    # >>> print_process_id()
    # will print the same process ID as the main process
    kernel_manager = QtInProcessKernelManager()
    kernel_manager.start_kernel()
    kernel = kernel_manager.kernel
    kernel.gui = 'qt4'
    kernel.shell.push({'splicer': splicer})

    kernel_client = kernel_manager.client()
    kernel_client.start_channels()

    def stop():
        kernel_client.stop_channels()
        kernel_manager.shutdown_kernel()
        app.exit()

    control = RichIPythonWidget()
    control.kernel_manager = kernel_manager
    control.kernel_client = kernel_client
    control.exit_requested.connect(stop)
    control.show()

    #app = QtGui.QApplication(sys.argv)
    #ex = Example()
    b = TaperDesign(Taper())
    sys.exit(app.exec_())
コード例 #10
0
    def __init__(self, parent=None, getfocus=None):
        super(IPythonView, self).__init__(parent)
        
        # Create an in-process kernel
        self.kernel_manager = QtInProcessKernelManager()
        self.kernel_manager.start_kernel()
        self.kernel = self.kernel_manager.kernel
        self.kernel.gui = 'qt4'
        self.shell = self.kernel.shell

        self.kernel_client = self.kernel_manager.client()
        self.kernel_client.start_channels()

        self.control = RichIPythonWidget()
        self.control.set_default_style(colors='linux')
        self.control.kernel_manager = self.kernel_manager
        self.control.kernel_client = self.kernel_client
        self.control.exit_requested.connect(self.stop)
        
        # Enable Pylab mode.
        self.shell.enable_pylab()
        self.shell.automagic = True
        
        # Add some variables in the namespace.
        self.push(galry=galry)
        
        box = QtGui.QVBoxLayout()
        box.addWidget(self.control)
        
        box.setContentsMargins(0, 0, 0, 0)
        box.setSpacing(0)

        
        self.setLayout(box)
コード例 #11
0
 def __init__(self, **kwarg):
     super(RichIPythonWidget, self).__init__()
     self.kernel_manager = QtInProcessKernelManager()
     self.kernel_manager.start_kernel()
     self.kernel = self.kernel_manager.kernel
     self.kernel.gui = 'qt4'
     self.kernel.shell.push(kwarg)
     self.kernel_client = self.kernel_manager.client()
     self.kernel_client.start_channels()
コード例 #12
0
    def __init__(self, parent=None, config=None):
        super(IPythonWidget, self).__init__(config=config, parent=parent)

        self.kernel_manager = QtInProcessKernelManager(config=config)
        self.kernel_manager.start_kernel()
        self.kernel_manager.kernel.gui = 'qt4'
        self.kernel_client = self.kernel_manager.client()
        self.kernel_client.start_channels()
        self.shell = self.kernel_manager.kernel.shell
        self.user_ns = self.kernel_manager.kernel.shell.user_ns
コード例 #13
0
    def _setup_kernel(self):
        """ Setup the kernel for the widget.

        """
        kernel_manager = QtInProcessKernelManager()
        kernel_manager.start_kernel()
        kernel_client = kernel_manager.client()
        kernel_client.start_channels()
        ipy_widget = self.ipy_widget
        ipy_widget.kernel_manager = kernel_manager
        ipy_widget.kernel_client = kernel_client
コード例 #14
0
    def __init__(self):
        RichIPythonWidget.__init__(self)
        self.kernel_manager = QtInProcessKernelManager()
        self.kernel_manager.start_kernel()
        self.kernel = self.kernel_manager.kernel

        self.kernel.gui = 'qt4'
        self.kernel.shell.push({'window': self, 'kernel': self.kernel})
        self.kernel_client = self.kernel_manager.client()
        self.kernel_client.start_channels()
        self.kernel_client.execute('%pylab inline')
        self.exit_requested.connect(self.exit_requested_func)
コード例 #15
0
 def showEvent(self, e):
     if not self._initialized:
         _logger().info('initializing shell')
         kernel_manager = QtInProcessKernelManager()
         kernel_manager.start_kernel()
         kernel_client = kernel_manager.client()
         kernel_client.start_channels()
         self.kernel_manager = kernel_manager
         self.kernel_client = kernel_client
         self._initialized = True
         self.apply_preferences()
         _logger().info('shell initialized')
     super(IPythonConsole, self).showEvent(e)
コード例 #16
0
        def __init__(self, *args, **kwargs):
            super(ErrorConsoleIPythonWidget, self).__init__(*args, **kwargs)

            self.kernel_manager = kernel_manager = QtInProcessKernelManager()
            kernel_manager.start_kernel()
            kernel_manager.kernel.gui = 'qt'
            self.kernel_client = kernel_client = self._kernel_manager.client()
            kernel_client.start_channels()

            self._append_plain_text("\nsdb (%s) -- Stencil Debugger." % Version().sdb_version())
            self._append_plain_text(
                "\nThe input and refrence fields, savepoints and serializers have been loaded. "
                "\nUse the 'whos' command for more information.")
コード例 #17
0
    def __init__(self,customBanner=None,*args,**kwargs):
        if customBanner!=None: self.banner=customBanner
        super(QIPythonWidget, self).__init__(*args,**kwargs)
        self.kernel_manager = kernel_manager = QtInProcessKernelManager()
        kernel_manager.start_kernel()
        kernel_manager.kernel.gui = 'qt4'
        self.kernel_client = kernel_client = self._kernel_manager.client()
        kernel_client.start_channels()

        def stop():
            kernel_client.stop_channels()
            kernel_manager.shutdown_kernel()
            guisupport.get_app_qt4().exit()            
        self.exit_requested.connect(stop)
コード例 #18
0
    def setup_console_widget(self):
        self.kernel_manager = QtInProcessKernelManager()
        self.kernel_manager.start_kernel()
        self.kernel = self.kernel_manager.kernel
        self.kernel.gui = 'qt4'
        self.kernel.shell.push({'np': np, 'app': self})
        self.kernel_client = self.kernel_manager.client()
        self.kernel_client.start_channels()

        self.console_widget = RichJupyterWidget()
        self.console_widget.setWindowTitle("py4DSTEM IPython Console")
        self.console_widget.kernel_manager = self.kernel_manager
        self.console_widget.kernel_client = self.kernel_client

        return self.console_widget
コード例 #19
0
ファイル: main.py プロジェクト: lind9/hexrd
    def _load_ipython(self):
        # Create an in-process kernel
        kernel_manager = QtInProcessKernelManager()
        kernel_manager.start_kernel()
        kernel_manager.kernel.gui = 'qt4'
        kernel_manager.kernel.shell.enable_pylab(gui='inline')

        kernel_client = kernel_manager.client()
        kernel_client.start_channels()

        control = RichIPythonWidget()
        self.ipythonDockWidget.setWidget(control)
        control.kernel_manager = kernel_manager
        control.kernel_client = kernel_client
        control.exit_requested.connect(kernel_client.stop_channels)
        control.exit_requested.connect(kernel_manager.shutdown_kernel)

        class IPythonNamespaceUpdater(QtCore.QObject):
            shell = kernel_manager.kernel.shell

            def eventFilter(self, target, e):
                if e.type() == QtCore.QEvent.Enter:
                    self.shell.push(globals())
                return False

        control.installEventFilter(IPythonNamespaceUpdater(self))

        class Debug(object):
            def __init__(self, shell):
                self.shell = shell

            def __call__(self):
                import inspect
                frame = inspect.currentframe()
                try:
                    temp = frame.f_back.f_globals
                    temp.update(frame.f_back.f_locals)
                finally:
                    del frame
                self.shell.run_line_magic('reset', '-f -s')
                self.shell.push(temp)

        # now monkeypatch hexrd.debug to use the qt console:
        hexrd.debug = Debug(kernel_manager.kernel.shell)
コード例 #20
0
    def __init__(self, partent):
        kernel_manager = QtInProcessKernelManager()
        kernel_manager.start_kernel()
        kernel = kernel_manager.kernel
        kernel.gui = 'qt'

        kernel_client = kernel_manager.client()
        kernel_client.start_channels()

        QtGui.QWidget.__init__(self)
        displayname = QtGui.QLabel('iPython Terminal Widget')
        mainlayout = QtGui.QGridLayout(self)
        #        console=IPythonWidget(self)
        console = RichIPythonWidget(self)
        console.kernel_manager = kernel_manager
        console.kernel_client = kernel_client
        console.exit_requested.connect(self.stop)

        mainlayout.addWidget(console, 0, 0)
コード例 #21
0
ファイル: ipythonconsole.py プロジェクト: yshshrm/RenderMe
    def __init__(self, customBanner=None, *args, **kwargs):
        if customBanner != None:
            self.banner = customBanner

        super(_QIPythonWidget, self).__init__(*args, **kwargs)

        # Embed the kernel within the event loop and expose the application
        # context
        self.kernel_manager = kernel_manager = QtInProcessKernelManager()
        kernel_manager.start_kernel()
        kernel_manager.kernel.gui = 'qt4'
        self.kernel_client = kernel_client = self._kernel_manager.client()
        kernel_client.start_channels()

        def stop():
            kernel_client.stop_channels()
            kernel_manager.shutdown_kernel()
            guisupport.get_app_qt4().exit()

        self.exit_requested.connect(stop)
コード例 #22
0
 def initialize(self):
     kernel_manager = QtInProcessKernelManager()
     kernel_manager.start_kernel()
     
     kernel = kernel_manager.kernel
     kernel.gui = 'qt4'
     
     kernel_client = kernel_manager.client()
     kernel_client.start_channels()
     
     app = guisupport.get_app_qt4()
     
     def stop():
         kernel_client.stop_channels()
         kernel_manager.shutdown_kernel()
         app.exit()
 
     self.kernel = kernel
     self.kernel_manager = kernel_manager
     self.kernel_client = kernel_client
     self.exit_requested.connect(stop)
コード例 #23
0
	def __init__(self,customBanner=None,*args,**kwargs):
		print ('importing KernelManager')
		from IPython.qt.inprocess import QtInProcessKernelManager
		print ('import GuiSupport')
		from IPython.lib import guisupport
		if customBanner!=None: self.banner=customBanner
		print ('initializing')
		super(QIPythonWidget, self).__init__(*args,**kwargs)
		print ('kernel manager creating')
		self.kernel_manager = kernel_manager = QtInProcessKernelManager()
		print ('kernel manager starting')
		kernel_manager.start_kernel()
		kernel_manager.kernel.gui = 'qt4'
		self.kernel_client = kernel_client = self._kernel_manager.client()
		kernel_client.start_channels()
	
		def stop():
				kernel_client.stop_channels()
				kernel_manager.shutdown_kernel()
				guisupport.get_app_qt4().exit()            
		self.exit_requested.connect(stop)
コード例 #24
0
ファイル: viewer.py プロジェクト: py4dstem/py4DSTEM
    def setup_console_widget(self):
        self.kernel_manager = QtInProcessKernelManager()
        self.kernel_manager.start_kernel()
        self.kernel = self.kernel_manager.kernel
        self.kernel.gui = 'qt4'
        self.kernel.shell.push({'np': np, 'app': self})
        self.kernel_client = self.kernel_manager.client()
        self.kernel_client.start_channels()

        #Avoid setting up multiple consoles
        alreadysetup = False
        if hasattr(self, 'console_widget'):
            if (isinstance(self.console_widget, RichJupyterWidget)):
                alreadysetup = True

        if not alreadysetup: self.console_widget = RichJupyterWidget()
        self.console_widget.setWindowTitle("py4DSTEM IPython Console")
        self.console_widget.kernel_manager = self.kernel_manager
        self.console_widget.kernel_client = self.kernel_client

        return self.console_widget
コード例 #25
0
ファイル: qtip.py プロジェクト: stevertaylor/qtip
    def createIPythonKernel(self):
        """
        Create the IPython Kernel
        """
        # Create an in-process kernel
        self.kernelManager = QtInProcessKernelManager()
        self.kernelManager.start_kernel()
        self.kernel = self.kernelManager.kernel

        self.kernelClient = self.kernelManager.client()
        self.kernelClient.start_channels()

        self.kernel.shell.enable_matplotlib(gui='inline')

        # Load the necessary packages in the embedded kernel
        cell = "import numpy as np, matplotlib.pyplot as plt, qtpulsar as qp"
        self.kernel.shell.run_cell(cell, store_history=False)

        # Set the in-kernel matplotlib color scheme to black.
        self.setMplColorScheme('black')  # Outside as well (do we need this?)
        self.kernel.shell.run_cell(constants.matplotlib_rc_cell_black,
                                   store_history=False)
コード例 #26
0
ファイル: kernel.py プロジェクト: keflavich/specview
def in_process_kernel(**kwargs):
    """Connect to an in-process Kernel

    This only works on IPython v 0.13 and above

    Parameters
    ----------
    kwargs : Extra variables to put into the namespace
    """

    kernel_info = {}
    kernel_info['manager'] = QtInProcessKernelManager()
    kernel_info['manager'].start_kernel()

    kernel = kernel_info['manager'].kernel
    kernel.gui = 'qt4'

    kernel_info['client'] = kernel_info['manager'].client()
    kernel_info['client'].start_channels()
    kernel_info['shell'] = kernel.shell

    return kernel_info
コード例 #27
0
    def __init__(self, customBanner=None, *args, **kwargs):
        if customBanner != None: self.banner = customBanner
        super(QIPythonWidget, self).__init__(*args, **kwargs)

        # Start in process kernel
        self.kernel_manager = kernel_manager = QtInProcessKernelManager()
        kernel_manager.start_kernel()
        kernel_manager.kernel.gui = 'qt4'
        self.kernel_client = kernel_client = self._kernel_manager.client()
        kernel_client.start_channels()

        # Pre import some modules and set some configuration options
        self.executeCommand('import numpy as np')
        self.executeCommand('import matplotlib.pylab as plt')
        self.executeCommand('%matplotlib inline')

        def stop():
            kernel_client.stop_channels()
            kernel_manager.shutdown_kernel()
            #guisupport.get_app_qt4().exit()

        self.exit_requested.connect(stop)
コード例 #28
0
ファイル: iconsole.py プロジェクト: lizhangscience/museros
import sys

from IPython.qt.console.rich_ipython_widget import RichIPythonWidget
from IPython.qt.inprocess import QtInProcessKernelManager
from IPython.lib import guisupport
from PyQt4.QtGui import QApplication

app = QApplication(sys.argv)

kernel_manager = QtInProcessKernelManager()
kernel_manager.start_kernel()
kernel = kernel_manager.kernel
kernel.gui = 'qt4'

kernel_client = kernel_manager.client()
kernel_client.start_channels()


def stop():
    kernel_client.stop_channels()
    kernel_manager.shutdown_kernel()
    # here you should exit your application with a suitable call
    sys.exit()


widget = RichIPythonWidget()
widget.kernel_manager = kernel_manager
widget.kernel_client = kernel_client
widget.exit_requested.connect(stop)
widget.setWindowTitle("IPython shell")
コード例 #29
0
    def run(self, dock=False):
        # Checks if a console is open
        if self.status is not None:
            if (dock and self.status == 'docked') or (not dock and self.status
                                                      == 'windowed'):
                if self.status == 'windowed':
                    self.control.raise_()
                    self.control.activateWindow()
                return
            elif self.status == 'docked':
                # Close current
                if self.dock is not None:
                    self.dock.close()
            else:
                # Close current
                self.control.close()
        try:
            if QT_VERSION == 4:
                from IPython.qt.console.rich_ipython_widget import RichIPythonWidget
            else:
                from qtconsole.rich_ipython_widget import RichIPythonWidget

            from IPython.qt.inprocess import QtInProcessKernelManager
            from qgis import core, gui

            # Create an in-process kernel
            kernel_manager = QtInProcessKernelManager()
            kernel_manager.start_kernel()
            kernel = kernel_manager.kernel
            kernel.gui = 'qt%s' % (QT_VERSION if QT_VERSION != 5 else '')
            kernel.shell.push({
                'iface': self.iface,
                'canvas': self.canvas,
                'core': core,
                'gui': gui,
                'propertize': propertize,
                'plugin_instance': self,
                #'app': app,
            })
            if int(self.get_settings('propertize', DEFAULT_PROPERTIZE)):
                kernel.shell.ex('propertize(core)')
                kernel.shell.ex('propertize(gui)')
            # Import in the current namespace
            kernel.shell.ex('from PyQt%s.QtCore import *' % QT_VERSION)
            kernel.shell.ex('from PyQt%s.QtGui import *' % QT_VERSION)
            kernel.shell.ex('from qgis.core import *')
            kernel.shell.ex('from qgis.gui import *')

            kernel_client = kernel_manager.client()
            kernel_client.start_channels()

            def stop():
                kernel_client.stop_channels()
                kernel_manager.shutdown_kernel()
                # No: this exits QGIS!
                #app.exit()
                self.status = None
                self.control = None
                self.dock = None

            # or RichIPythonWidget
            class myWidget(RichIPythonWidget):
                def closeEvent(self, event):
                    stop()
                    event.accept()

                def resizeEvent(self, event):
                    super(myWidget, self).resizeEvent(event)
                    self.console_resize()
                    event.accept()

                def get_columns(self):
                    try:
                        font_width = QFontMetrics(self.font).width(' ')
                    except TypeError:
                        font_width = 10
                    return int(self.size().width() / font_width)

                def console_resize(self):
                    self.width = self.get_columns()

            class myDock(QDockWidget):
                def closeEvent(self, event):
                    stop()
                    event.accept()

            # IPythonWidget.gui_completion : ‘plain’|’droplist’|’ncurses’
            # IPythonWidget.height : Integer
            # IPythonWidget.width : Integer
            # TODO: settings
            # myWidget.width = 160
            myWidget.gui_completion = 'plain'
            myWidget.paging = 'none'
            self.control = myWidget()

            self.control.kernel_manager = kernel_manager
            self.control.kernel_client = kernel_client
            self.control.exit_requested.connect(stop)

            if not dock:
                self.status = 'windowed'
                self.control.show()
            else:
                self.status = 'docked'
                self.dock = myDock()
                self.dock.setWidget(self.control)
                self.iface.addDockWidget(Qt.BottomDockWidgetArea, self.dock)

            # Font size regulation
            self.set_font()
            self.control._set_font(self.console_font)

            def shout():
                from IPython.core import usage
                self.control._control.clear()
                self.control._reading = False
                self.control._highlighter.highlighting_on = False
                try:
                    self.control._append_before_prompt_pos = self.control._get_cursor(
                    ).position()
                except Exception as ex:
                    # Can't set attribute .... on mac/win
                    pass
                if int(self.get_settings('show_help', DEFAULT_SHOW_HELP)):
                    banner = getattr(usage, 'default_banner',
                                     usage.default_gui_banner)
                    self.control._append_html(
                        '<small>%s</small>' %
                        banner.replace('\n', '<br>').strip())
                    if int(self.get_settings('propertize',
                                             DEFAULT_PROPERTIZE)):
                        propertize_text = (
                            """All returning-something and no-args <code>core</code> and <code>gui</code> <code>Qgs*</code> class members have a <code>p_*</code> equivalent property to ease class introspection with <strong>TAB</strong> completion."""
                        )
                    else:
                        propertize_text = _tr(
                            """Propertize has been disabled, you can re-activate it in the pugin's settings."""
                        )
                    self.control._append_html(
                        _tr("""<br><h3>Welcome to QGIS <a href="https://ipython.org/">IPython</a> Console</h3>
                    You have access to <code>canvas</code>, <code>iface</code>, <code>app</code> (QGIS application) objects and to all <code>qgis</code> and <code>PyQt</code> <code>core</code> and <code>gui</code> modules directly from the shell. %s Don't forget that you have access to all your underlying shell commands too!<br>
                    <em>Enjoy IPyConsole! Another hack by <a href="http://www.itopen.it">ItOpen</a></em></br>
                    """) % propertize_text)

            def monkey_patch_columnize(control):
                """As the name suggests... dynamic column number: stock
                qtconsole doesn't resize its column number on window
                resize but sticks to 80"""
                from IPython.qt.console.completion_plain import text
                old_columnize = text.columnize

                def new_columnize(items, separator='  ', displaywidth=80):
                    displaywidth = control.get_columns()
                    return old_columnize(items, separator, displaywidth)

                text.columnize = new_columnize

            monkey_patch_columnize(self.control)
            QTimer.singleShot(0, shout)

        except ImportError as e:
            QMessageBox.information(
                self.iface.mainWindow(), _tr(u'Error'),
                _tr(u'You need to install <b>IPython 3.1.0</b> or <b>Jupyter 1.0.0</b> (and then restart QGIS) before running this <b>IPyConsole</b> plugin.<br>IPython can be installed with <code>pip install "ipython[all]==3.1.0 qtconsole"</code> or (better) <code>pip install jupyter==1.0.0 qtconsole</code>. More informations about IPython installation on <a href="https://ipython.org/install.html">https://ipython.org/install.html</a>. Windows users might need to run the commands as admin in the OSGEO Command Shell.<br>The exception message is: %s'
                    ) % e)
コード例 #30
0
    def setup_console_widget(self, kernel=None):
        """
        Create and return console QWidget. If Jupyter / IPython is installed
        this widget will be a full-featured IPython console. If Jupyter is unavailable
        it will fallback to a pyqtgraph.console.ConsoleWidget.
        
        If the app is started in an Jupyter notebook, the console will be
        connected to the notebook's IPython kernel.
        
        the returned console_widget will also be accessible as self.console_widget
        
        In order to see the console widget, remember to insert it into an existing
        window or call self.console_widget.show() to create a new window      
        """
        if CONSOLE_TYPE == 'pyqtgraph.console':
            self.console_widget = pyqtgraph.console.ConsoleWidget(
                namespace={
                    'app': self,
                    'pg': pg,
                    'np': np
                },
                text="ScopeFoundry Console")
        elif CONSOLE_TYPE == 'qtconsole':

            if kernel == None:
                try:  # try to find an existing kernel
                    #https://github.com/jupyter/notebook/blob/master/docs/source/examples/Notebook/Connecting%20with%20the%20Qt%20Console.ipynb
                    import ipykernel as kernel
                    conn_file = kernel.get_connection_file()
                    import qtconsole.qtconsoleapp
                    self.qtconsole_app = qtconsole.qtconsoleapp.JupyterQtConsoleApp(
                    )
                    self.console_widget = self.qtconsole_app.new_frontend_connection(
                        conn_file)
                    self.console_widget.setWindowTitle(
                        "ScopeFoundry IPython Console")
                except:  # make your own new in-process kernel
                    # https://github.com/ipython/ipython-in-depth/blob/master/examples/Embedding/inprocess_qtconsole.py
                    self.kernel_manager = QtInProcessKernelManager()
                    self.kernel_manager.start_kernel()
                    self.kernel = self.kernel_manager.kernel
                    self.kernel.shell.banner1 += """
                    ScopeFoundry Console
                    
                    Variables:
                     * np: numpy package
                     * app: the ScopeFoundry App object
                    """
                    self.kernel.gui = 'qt4'
                    self.kernel.shell.push({'np': np, 'app': self})
                    self.kernel_client = self.kernel_manager.client()
                    self.kernel_client.start_channels()

                    #self.console_widget = RichIPythonWidget()
                    self.console_widget = RichJupyterWidget()
                    self.console_widget.setWindowTitle(
                        "ScopeFoundry IPython Console")
                    self.console_widget.kernel_manager = self.kernel_manager
                    self.console_widget.kernel_client = self.kernel_client
            else:
                import qtconsole.qtconsoleapp
                self.qtconsole_app = qtconsole.qtconsoleapp.JupyterQtConsoleApp(
                )
                self.console_widget = self.qtconsole_app.new_frontend_connection(
                    kernel.get_connection_file())
                self.console_widget.setWindowTitle(
                    "ScopeFoundry IPython Console")
        else:
            raise ValueError("CONSOLE_TYPE undefined")

        return self.console_widget