2012-11-05 33 views
6

我正在爲我的實驗室開發PyQt軟件。在這個軟件中,我從mySQL數據庫(通常是數組)中加載不同類型的RAW和分析數據。如何在PyQT應用程序中集成Ipython控制檯

我想將Iython控制檯集成到Widget中,以便我可以輕鬆地與這些數據進行交互。

我有一些困難與Ipython 0.13做到這一點。
以下是我已經有(整個代碼很長,所以我只顯示部分含有小部件,IPython的控制檯和相應的進口線,如果你需要更多的,只是告訴我):

##I load everything useful to my application, including the following line 
from IPython.frontend.qt.console.qtconsoleapp import IPythonQtConsoleApp 

##then is my whole software 
##here is a class containing the Graphical User Interface elements. A button call the following function. self.Shell_Widget is the widget containing the Ipython console, self.MainWindow is the application mainwindow 
def EmbeddedIpython(self): 
    """ 
    This function should launch an Ipython console 
    """ 


    self.Shell_Widget = QtGui.QDockWidget(self.MainWindow) #Widget creation 
    self.MainWindow.addDockWidget(4,self.Shell_Widget) 
    self.Shell_Widget.setMinimumSize(400,420) 

    console = IPythonQtConsoleApp() #Console Creation 
    console.initialize() 
    console.start() 


    self.Shell_Widget.show() 

所以,正如所希望的,一個Ipython控制檯啓動,似乎工作,但我不能訪問整個應用程序變量,數組等...我認爲Ipython控制檯獨立於我的軟件啓動,但這是我的極限在編程... 有人知道如何在我的應用程序中啓動Ipython嗎?也許缺少一個參數,或者不同的方法來集成Ipython。

的信息,這不起作用: Embedding IPython Qt console in a PyQt application

謝謝您的幫助!

回答

2

mentioned link似乎無暇這裏工作:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

import atexit 

from IPython.zmq.ipkernel import IPKernelApp 
from IPython.lib.kernel import find_connection_file 
from IPython.frontend.qt.kernelmanager import QtKernelManager 
from IPython.frontend.qt.console.rich_ipython_widget import RichIPythonWidget 
from IPython.utils.traitlets import TraitError 

from PyQt4 import QtGui, QtCore 

def event_loop(kernel): 
    kernel.timer = QtCore.QTimer() 
    kernel.timer.timeout.connect(kernel.do_one_iteration) 
    kernel.timer.start(1000*kernel._poll_interval) 

def default_kernel_app(): 
    app = IPKernelApp.instance() 
    app.initialize(['python', '--pylab=qt']) 
    app.kernel.eventloop = event_loop 
    return app 

def default_manager(kernel): 
    connection_file = find_connection_file(kernel.connection_file) 
    manager = QtKernelManager(connection_file=connection_file) 
    manager.load_connection_file() 
    manager.start_channels() 
    atexit.register(manager.cleanup_connection_file) 
    return manager 

def console_widget(manager): 
    try: # Ipython v0.13 
     widget = RichIPythonWidget(gui_completion='droplist') 
    except TraitError: # IPython v0.12 
     widget = RichIPythonWidget(gui_completion=True) 
    widget.kernel_manager = manager 
    return widget 

def terminal_widget(**kwargs): 
    kernel_app = default_kernel_app() 
    manager = default_manager(kernel_app) 
    widget = console_widget(manager) 

    #update namespace               
    kernel_app.shell.user_ns.update(kwargs) 

    kernel_app.start() 
    return widget 

class mainWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(mainWindow, self).__init__(parent) 

     self.console = terminal_widget(testing=123) 

     print "\nAn Embeded Ipython Console!" 

     self.textEdit = QtGui.QTextEdit() 

     self.dockShell = QtGui.QDockWidget(self) 
     self.dockShell.setWidget(self.textEdit) 

     self.addDockWidget(4, self.dockShell) 
     self.setCentralWidget(self.console) 

if __name__ == "__main__": 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    main = mainWindow() 
    main.show() 
    sys.exit(app.exec_()) 
相關問題