Jupyter QtConsole 4.4.2 が埋め込まれたかなり大きなプロジェクトがあります。
詳細については、 https ://github.com/3fon3fonov/trifon を参照してください。
現在、いくつかのプロセスが実行中/終了している間に、Qtconsole にテキストを送信し、それを出力画面として使用しようとしています (逆に、必要に応じて Jupyter が GUI を制御できるようにしたいと考えています。しかし、これは後で対処しなければならない別の問題です)。
問題は、「ConsoleWidget」関数に固有の一部が機能していないようで、その理由が見つからないことです...
たとえば、メインの GUI コードでは次のようになります。
ConsoleWidget_embed().push_vars({'fit':fit}) <-- WORKS!
ConsoleWidget_embed().clear() <-- Does not work!
ConsoleWidget_embed().print_text("Test string") <-- Does not work!
Qtabに埋め込んでいるコードは次のとおりです。
import numpy as np
import sys #,os
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from qtconsole.rich_jupyter_widget import RichJupyterWidget
from qtconsole.inprocess import QtInProcessKernelManager
from qtconsole.console_widget import ConsoleWidget
class ConsoleWidget_embed(RichJupyterWidget,ConsoleWidget):
global fit
def __init__(self, customBanner=None, *args, **kwargs):
super(ConsoleWidget_embed, self).__init__(*args, **kwargs)
if customBanner is not None:
self.banner = customBanner
#self.font_size = 4
self.kernel_manager = QtInProcessKernelManager()
self.kernel_manager.start_kernel(show_banner=True)
self.kernel_manager.kernel.gui = 'qt'
self.kernel = self.kernel_manager.kernel
self.kernel_client = self._kernel_manager.client()
self.kernel_client.start_channels()
#self._execute("kernel = %s"%fit, False)
def stop():
self.kernel_client.stop_channels()
self.kernel_manager.shutdown_kernel()
self.guisupport.get_app_qt().exit()
self.exit_requested.connect(stop)
def push_vars(self, variableDict):
"""
Given a dictionary containing name / value pairs, push those variables
to the Jupyter console widget
"""
self.kernel_manager.kernel.shell.push(variableDict)
def clear(self):
"""
Clears the terminal
"""
self._control.clear()
# self.kernel_manager
def print_text(self, text):
"""
Prints some plain text to the console
"""
self._append_plain_text(text, before_prompt=False)
def execute_command(self, command):
"""
Execute a command in the frame of the console widget
"""
self._execute(command, False)
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
main = mainWindow()
main.show()
sys.exit(app.exec_())
どんなアイデアでも大歓迎です!
頑張れ、トリフォン