main.py
106 lines
| 3.7 KiB
| text/x-python
|
PythonLexer
r1477 | # This Python file uses the following encoding: utf-8 | |||
import os | ||||
print(os.getcwd()) | ||||
import sys | ||||
from PySide2.QtWidgets import QApplication, QMainWindow, QDockWidget | ||||
from PySide2.QtCore import QSize, Qt | ||||
from PySide2 import QtGui | ||||
import os | ||||
r1478 | sys.path.append(os.getcwd()) | |||
r1477 | from SciQLopBindings import SqpApplication, MainWindow, init_resources, load_plugins, SqpApplication_ctor | |||
from qtconsole.rich_ipython_widget import RichJupyterWidget | ||||
from qtconsole.inprocess import QtInProcessKernelManager | ||||
class IPythonWidget(RichJupyterWidget): | ||||
"""Live IPython console widget. | ||||
.. image:: img/IPythonWidget.png | ||||
:param custom_banner: Custom welcome message to be printed at the top of | ||||
the console. | ||||
""" | ||||
def __init__(self, parent=None, custom_banner=None, *args, **kwargs): | ||||
if parent is not None: | ||||
kwargs["parent"] = parent | ||||
super(IPythonWidget, self).__init__(*args, **kwargs) | ||||
if custom_banner is not None: | ||||
self.banner = custom_banner | ||||
self.setWindowTitle(self.banner) | ||||
self.kernel_manager = kernel_manager = QtInProcessKernelManager() | ||||
kernel_manager.start_kernel() | ||||
self.kernel_client = kernel_client = self._kernel_manager.client() | ||||
kernel_client.start_channels() | ||||
def stop(): | ||||
kernel_client.stop_channels() | ||||
kernel_manager.shutdown_kernel() | ||||
self.exit_requested.connect(stop) | ||||
def sizeHint(self): | ||||
"""Return a reasonable default size for usage in :class:`PlotWindow`""" | ||||
return QSize(500, 300) | ||||
def pushVariables(self, variable_dict): | ||||
""" Given a dictionary containing name / value pairs, push those | ||||
variables to the IPython console widget. | ||||
:param variable_dict: Dictionary of variables to be pushed to the | ||||
console's interactive namespace (```{variable_name: object, …}```) | ||||
""" | ||||
self.kernel_manager.kernel.shell.push(variable_dict) | ||||
class IPythonDockWidget(QDockWidget): | ||||
"""Dock Widget including a :class:`IPythonWidget` inside | ||||
a vertical layout. | ||||
.. image:: img/IPythonDockWidget.png | ||||
:param available_vars: Dictionary of variables to be pushed to the | ||||
console's interactive namespace: ``{"variable_name": object, …}`` | ||||
:param custom_banner: Custom welcome message to be printed at the top of | ||||
the console | ||||
:param title: Dock widget title | ||||
:param parent: Parent :class:`qt.QMainWindow` containing this | ||||
:class:`qt.QDockWidget` | ||||
""" | ||||
def __init__(self, parent=None, available_vars=None, custom_banner=None, | ||||
title="Console"): | ||||
super(IPythonDockWidget, self).__init__(title, parent) | ||||
self.ipyconsole = IPythonWidget(custom_banner=custom_banner) | ||||
self.layout().setContentsMargins(0, 0, 0, 0) | ||||
self.setWidget(self.ipyconsole) | ||||
if available_vars is not None: | ||||
self.ipyconsole.pushVariables(available_vars) | ||||
self.ipyconsole.pushVariables({"blah":self}) | ||||
def showEvent(self, event): | ||||
"""Make sure this widget is raised when it is shown | ||||
(when it is first created as a tab in PlotWindow or when it is shown | ||||
again after hiding). | ||||
""" | ||||
self.raise_() | ||||
def print_process_id(): | ||||
print ('Process ID is:', os.getpid()) | ||||
if __name__ == "__main__": | ||||
init_resources() | ||||
r1478 | app = SqpApplication_ctor(sys.argv) | |||
r1477 | QtGui.qApp = app | |||
load_plugins(app) | ||||
main_window = MainWindow() | ||||
term = IPythonDockWidget(available_vars={"app":app, "main_window":main_window}, custom_banner="SciQLop IPython Console ") | ||||
main_window.addDockWidget(Qt.BottomDockWidgetArea, term) | ||||
main_window.show() | ||||
r1479 | for file in os.listdir('plugins'): | |||
if os.path.isfile(f"plugins/{file}"): | ||||
exec(open(f"plugins/{file}").read()) | ||||
r1477 | sys.exit(app.exec_()) | |||