Python控制台打印输出与spyder控制台不同

时间:2011-08-12 17:02:32

标签: python qt pyqt

我有一个python代码,可以从HP LCR Meter上测量并以各种方式为我们收集数据。我最近创建了一个GUI,用于为员工不熟悉修改代码中的变量的初始条件。一切都有效,除了一件事。我们在Windows 7 PC上使用最新的python xy so python版本2.6.6与pyqt和spyder。

通常我们会在spyder中打开代码。但是打开spyder需要一段时间,而我的主管喜欢只需双击文件即可打开带有python控制台窗口的GUI来打印错误和各种信息,就像你在spyder中看到的那样。

从所提供的屏幕截图中可以看出,有一个初始机器设置模式,用于设置要由LCR仪表扫描的设备,并且代码提示有两个用户输入。在spyder上,它在控制台中很好地打印出这些提示,但是在没有spyder的情况下打开的python控制台中它连续打印QCoreApplication::exec: The event loop is already running奇怪的是你仍然可以正常按两次输入,代码将像平常一样运行。但除了我之外,基本上每个人都会感到困惑。

有谁知道为什么会发生这种情况?

Here are the pictures of the output

以下是提示输入的代码。

    lcr = visa.instrument('GPIB::17')
        #clear the instrument
        lcr.write('*RST;*CLS')
        #enable operation complete notification
        lcr.write('*OPC')
        if parallel:
            lcr.write('FUNC:IMP CPG')   #Parallel capacitance, conductance model
        else:
            lcr.write('FUNC:IMP CSRS')   #Series capacitance, resistance model
        lcr.write('APER '+integration+','+averages)
        lcr.write('OUTP:HPOW ON')
        lcr.write('OUTP:DC:ISOL OFF')
        lcr.write('VOLT '+vac)
        lcr.write('TRIG:SOUR BUS')

        if zero == True:
            #set open correction parameters
            lcr.write('DISP:PAGE CSET')
            lcr.write('CORR:LENG 1')
            lcr.write('CORR:METH SING')
            lcr.write('CORR:LOAD CPG')
            lcr.write('CORR:USE 10') 
            lcr.write('CORR:SPOT1:STATE ON')    
            lcr.write('CORR:SPOT2:STATE OFF')    
            lcr.write('CORR:SPOT3:STATE OFF')
            lcr.write('CORR:SPOT1:FREQ '+frequency)
            #perform open correction -> unprobe device\   
            raw_input('Unprobe DUT and press ENTER to continue...')
            lcr.write('CORR:SPOT1:OPEN')
            lcr.write('CORR:OPEN:STATE ON')
            lcr.write('DISP:PAGE MEAS')
            #poll lcr to determine measurment state
            lcr.write('*OPC?')    
            done = lcr.read()    
            while done == 0:
                lcr.write('*OPC?')
                done = lcr.read()        
                time.sleep(0.5)
            #reprobe device                                
            raw_input('Probe DUT, then press ENTER')                
        lcr.write('FREQ '+frequency)

提示是两个raw_input()

1 个答案:

答案 0 :(得分:2)

您在控制台中获得连续消息的原因是系统日志使用的输出流与您的应用相同。

Spyder很好的程序,它只是在QT窗口中嵌入了IPython或Python(备份)控制台,你可以使用类似的解决方案 - 只需使用Qt4绘制窗口,其中包括IPython控制台

您需要做的是(source):

def embed_ipython(window):
    "wrapper funcs - works < IPython 0.11"
    from IPython.Shell import IPShellEmbed
    ipshell = IPShellEmbed(user_ns = dict(w = window))
    ipshell()

这里'window'是你想要暴露给IPython的某种中心对象(操纵,测试各种方法等)。

GUI应用初始化将是这样的:

if __name__ == "__main__":
    import sys
    from PyQt4 import QtGui
    app = QtGui.QApplication(sys.argv)
    window = QtGui.QMainWindow()
    window.show()
    embed_ipython(window)
    sys.exit(app.exec_())

一些额外的读物: