internal_ipkernel.py
55 lines
| 2.0 KiB
| text/x-python
|
PythonLexer
Fernando Perez
|
r4489 | #----------------------------------------------------------------------------- | ||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
import sys | ||||
MinRK
|
r5267 | from IPython.lib.kernel import connect_qtconsole | ||
Martin Spacek
|
r11346 | from IPython.kernel.zmq.kernelapp import IPKernelApp | ||
Fernando Perez
|
r4489 | |||
#----------------------------------------------------------------------------- | ||||
# Functions and classes | ||||
#----------------------------------------------------------------------------- | ||||
MinRK
|
r15184 | def mpl_kernel(gui): | ||
"""Launch and return an IPython kernel with matplotlib support for the desired gui | ||||
Fernando Perez
|
r4489 | """ | ||
MinRK
|
r5267 | kernel = IPKernelApp.instance() | ||
MinRK
|
r15184 | kernel.initialize(['python', '--matplotlib=%s' % gui, | ||
Fernando Perez
|
r4489 | #'--log-level=10' | ||
]) | ||||
return kernel | ||||
class InternalIPKernel(object): | ||||
def init_ipkernel(self, backend): | ||||
MinRK
|
r15184 | # Start IPython kernel with GUI event loop and mpl support | ||
self.ipkernel = mpl_kernel(backend) | ||||
Fernando Perez
|
r4489 | # To create and track active qt consoles | ||
self.consoles = [] | ||||
# This application will also act on the shell user namespace | ||||
self.namespace = self.ipkernel.shell.user_ns | ||||
# Example: a variable that will be seen by the user in the shell, and | ||||
# that the GUI modifies (the 'Counter++' button increments it): | ||||
self.namespace['app_counter'] = 0 | ||||
#self.namespace['ipkernel'] = self.ipkernel # dbg | ||||
def print_namespace(self, evt=None): | ||||
Thomas Kluyver
|
r6453 | print("\n***Variables in User namespace***") | ||
Thomas Kluyver
|
r13991 | for k, v in self.namespace.items(): | ||
MinRK
|
r15184 | if not k.startswith('_'): | ||
Thomas Kluyver
|
r6453 | print('%s -> %r' % (k, v)) | ||
Fernando Perez
|
r4489 | sys.stdout.flush() | ||
def new_qt_console(self, evt=None): | ||||
MinRK
|
r5267 | """start a new qtconsole connected to our kernel""" | ||
return connect_qtconsole(self.ipkernel.connection_file, profile=self.ipkernel.profile) | ||||
Fernando Perez
|
r4489 | |||
def count(self, evt=None): | ||||
self.namespace['app_counter'] += 1 | ||||
def cleanup_consoles(self, evt=None): | ||||
for c in self.consoles: | ||||
c.kill() | ||||