Example #1
0
class QIPythonWidget_embed(QWidget):
    def __init__(self, parent=None, custom_banner=None, **kwargs):
        super(QIPythonWidget_embed, self).__init__(parent=parent, **kwargs)

        self.plugin = parent

        kernel_manager = QtKernelManager(kernel_name=USE_KERNEL)
        kernel_manager.start_kernel()

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

        self.jupyter_widget = RichJupyterWidget()
        self.jupyter_widget.kernel_manager = kernel_manager
        self.jupyter_widget.kernel_client = kernel_client

        if custom_banner is not None:
            self.jupyter_widget.banner = custom_banner

        layout = QHBoxLayout()
        layout.addWidget(self.jupyter_widget)

    def push_variables(self, variableDict):
        """ Given a dictionary containing name / value pairs,
        push those variables to the IPython console widget """
        self.jupyter_widget.kernel_manager.kernel.shell.push(variableDict)

    def clear_terminal(self):
        """ Clears the terminal """
        self.jupyter_widget._control.clear()

    def print_text(self, text):
        """ Prints some plain text to the console """
        self.jupyter_widget._append_plain_text(text, True)

    def execute_command(self, command):
        """ Execute a command in the frame of the console widget """
        self.jupyter_widget._execute(command, False)
Example #2
0
class ipython_console(base_console, QtWidgets.QWidget):

	"""
	desc:
		An IPython-based debug window.
	"""

	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 = QtWidgets.QVBoxLayout(self)
		self.verticalLayout.setContentsMargins(0,0,0,0)
		self.setLayout(self.verticalLayout)
		self.verticalLayout.addWidget(self.control)

	def clear(self):

		"""See base_console."""

		self.control.reset(clear=True)

	def focus(self):

		"""See base_console."""

		self.control._control.setFocus()

	def reset(self):

		"""See base_console."""

		self.kernel.shell.reset()
		self.kernel.shell.push(self.default_globals())
		self.clear()
		super(ipython_console, self).reset()

	def show_prompt(self):

		"""See base_console."""

		self.control._show_interpreter_prompt()

	def get_workspace_globals(self):

		"""See base_console."""

		return self.kernel.shell.user_global_ns.copy()

	def set_workspace_globals(self, _globals={}):

		"""See base_console."""

		self.kernel.shell.push(_globals)

	def validTheme(self, cs):

		"""
		returns:
			desc:	True if the colorscheme is valid, False otherwise.
			type:	bool
		"""

		for key in [
			u'Background',
			u'Default',
			u'Prompt in',
			u'Prompt out',
			u'Comment',
			u'Keyword',
			u'Identifier',
			u'Double-quoted string',
			u'Invalid',
			u'Number',
			u'Operator',
			]:
			if key not in cs:
				return False
		return True

	def setTheme(self):

		"""
		desc:
			Sets the theme, based on the QProgEdit settings.
		"""

		from QProgEdit import QColorScheme
		if not hasattr(QColorScheme, cfg.qProgEditColorScheme):
			debug.msg(u'Failed to set debug-output colorscheme')
			return u''
		cs = getattr(QColorScheme, cfg.qProgEditColorScheme)
		if not self.validTheme(cs):
			debug.msg(u'Invalid debug-output colorscheme')
			return u''
		self.control._highlighter.set_style(pygments_style_factory(cs))
		qss = u'''QPlainTextEdit, QTextEdit {
				background-color: %(Background)s;
				color: %(Default)s;
			}
			.in-prompt { color: %(Prompt in)s; }
			.in-prompt-number { font-weight: bold; }
			.out-prompt { color: %(Prompt out)s; }
			.out-prompt-number { font-weight: bold; }
			''' % cs
		self.control.style_sheet = qss
		self.control._control.setFont(QtGui.QFont(cfg.qProgEditFontFamily,
			cfg.qProgEditFontSize))

	def setup(self, main_window):

		"""See base_subcomponent."""

		super(ipython_console, self).setup(main_window)
		self.kernel.shell.push(self.default_globals())

	def write(self, s):

		"""See base_console."""

		self.control._append_plain_text(str(s))
		self.control._control.ensureCursorVisible()

	def execute(self, s):

		"""See base_console."""

		self.main_window.ui.dock_stdout.setVisible(True)
		self.control.execute(s)

	def focusInEvent(self, e):

		self.control.setFocus()
		e.accept()
Example #3
0
class ipython_console(base_console, QtWidgets.QWidget):
    """
	desc:
		An IPython-based debug window.
	"""
    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 = QtWidgets.QVBoxLayout(self)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(self.verticalLayout)
        self.verticalLayout.addWidget(self.control)

    def clear(self):
        """See base_console."""

        self.control.reset(clear=True)

    def focus(self):
        """See base_console."""

        self.control._control.setFocus()

    def reset(self):
        """See base_console."""

        self.kernel.shell.reset()
        self.kernel.shell.push(self.default_globals())
        self.clear()
        super(ipython_console, self).reset()

    def show_prompt(self):
        """See base_console."""

        self.control._show_interpreter_prompt()

    def get_workspace_globals(self):
        """See base_console."""

        return self.kernel.shell.user_global_ns.copy()

    def set_workspace_globals(self, _globals={}):
        """See base_console."""

        self.kernel.shell.push(_globals)

    def validTheme(self, cs):
        """
		returns:
			desc:	True if the colorscheme is valid, False otherwise.
			type:	bool
		"""

        for key in [
                u'Background',
                u'Default',
                u'Prompt in',
                u'Prompt out',
                u'Comment',
                u'Keyword',
                u'Identifier',
                u'Double-quoted string',
                u'Invalid',
                u'Number',
                u'Operator',
        ]:
            if key not in cs:
                return False
        return True

    def setTheme(self):
        """
		desc:
			Sets the theme, based on the QProgEdit settings.
		"""

        from QProgEdit import QColorScheme
        if not hasattr(QColorScheme, cfg.qProgEditColorScheme):
            debug.msg(u'Failed to set debug-output colorscheme')
            return u''
        cs = getattr(QColorScheme, cfg.qProgEditColorScheme)
        if not self.validTheme(cs):
            debug.msg(u'Invalid debug-output colorscheme')
            return u''
        self.control._highlighter.set_style(pygments_style_factory(cs))
        qss = u'''QPlainTextEdit, QTextEdit {
				background-color: %(Background)s;
				color: %(Default)s;
			}
			.in-prompt { color: %(Prompt in)s; }
			.in-prompt-number { font-weight: bold; }
			.out-prompt { color: %(Prompt out)s; }
			.out-prompt-number { font-weight: bold; }
			''' % cs
        self.control.style_sheet = qss
        self.control._control.setFont(
            QtGui.QFont(cfg.qProgEditFontFamily, cfg.qProgEditFontSize))

    def setup(self, main_window):
        """See base_subcomponent."""

        super(ipython_console, self).setup(main_window)
        self.kernel.shell.push(self.default_globals())

    def write(self, s):
        """See base_console."""

        self.control._append_plain_text(str(s))

    def execute(self, s):
        """See base_console."""

        self.main_window.ui.dock_stdout.setVisible(True)
        self.control.execute(s)

    def focusInEvent(self, e):

        self.control.setFocus()
        e.accept()
Example #4
0
class IPythonDock(Dock):
    def __init__(self, *args, **kwargs):
        super(IPythonDock, self).__init__(*args, **kwargs)
        self.setMinimumHeight(25)
        self.setMinimumWidth(500)
        self.setWindowTitle("IPython Shell")
        self.setAllowedAreas(QtCore.Qt.AllDockWidgetAreas)
        self.console = RichJupyterWidget(name="console")
        self.console.font_size = 7
        self.setWidget(self.console)

    def setup_ipython(self, main_window):
        """
        Sets up the ipython shell for the relevant docks. 
        :return: 
        """
        self.console.kernel_manager = kernel_manager = \
            QtInProcessKernelManager()
        kernel_manager.start_kernel(show_banner=True)
        kernel_manager.kernel.gui = 'qt'
        self.console.kernel_client = kernel_client = kernel_manager.client()
        kernel_client.start_channels()

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

        self.console.exit_requested.connect(stop)
        self.push_vars({"KatilInstance": main_window})
        self.console.show()
        self.inject_globals()
        self.inject_debugs()

    def push_vars(self, variableDict):
        """
        Given a dictionary containing name / value pairs, push those variables
        to the Jupyter console widget
        """
        self.console.kernel_manager.kernel.shell.push(variableDict)

    def pull_var(self, varName, delete=False):
        v = self.console.kernel_manager.kernel.shell.user_ns[varName]
        if delete:
            del self.console.kernel_manager.kernel.shell.user_ns[varName]
        return v

    def delete_var(self, varName):
        del self.console.kernel_manager.kernel.shell.user_ns[varName]

    def clear(self):
        """
        Clears the terminal
        """
        self.console._control.clear()

        # self.kernel_manager

    def print_text(self, text):
        """
        Prints some plain text to the console
        """
        self.console._append_plain_text(text)

    def execute_command(self, command):
        """
        Execute a command in the frame of the console widget
        """
        self.console._execute(command, False)

    def inject_globals(self, glbls=None):
        """
        Inject the globals() dict into the IPython kernel
        under the key '_injected'
        :return:
        """
        if glbls is None:
            glbls = globals()
        self.push_vars({"_injected": glbls})
        self.execute_command("from PyQt5.QtWidgets import *")
        self.execute_command("from praatkatili import *")

    def inject_debugs(self):
        self.push_vars({'canvas': self.findChildren(PlotCanvas)})