2012-11-05 13 views
6

मैं अपनी प्रयोगशाला के लिए पीईक्यूटी सॉफ्टवेयर विकसित कर रहा हूं। इस सॉफ्टवेयर में, मैं विभिन्न प्रकार के रॉ लोड कर रहा हूं और एक mySQL डेटाबेस (आमतौर पर सरणी में) से डेटा का विश्लेषण कर रहा हूं।एक पीईक्यूटी अनुप्रयोग में एक आईपीथॉन कंसोल को एकीकृत करने के लिए कैसे करें

मैं एक विजेट में एक आईथन कंसोल को एकीकृत करना चाहता हूं, ताकि मैं इन डेटा के साथ आसानी से बातचीत कर सकूं।

मुझे ऐसा करने के लिए Ipython 0.13 के साथ कुछ कठिनाइयों थी।

##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 को एकीकृत करने के लिए एक अलग तरीका है।

जानकारी के लिए, यह काम नहीं करता: 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_()) 
संबंधित मुद्दे