2016-08-29 4 views
0

나는 http://pythonqt.sourceforge.net/Examples.html의 예제를 따르고 있지만 PythonQt는 콘솔에 아무것도 인쇄하지 않습니다. hello을 인쇄하는 스크립트를 실행하지만 아무 것도 인쇄되지 않습니다. 흥미로운 것은 내가 Py_Initialize(); 전에 PythonQt::init();를 추가하는 경우, 아무 것도 다시 인쇄되지 도착한다는 것입니다PythonQt가 아무 것도 출력하지 않습니다

Py_Initialize(); 
PyRun_SimpleString("print 'hello'\n"); 

: 나는 그것이 작동 hello가 인쇄 내장 일반 파이썬을 사용하여 실행하면 다른 한편으로

PythonQt::init(); 
PythonQtObjectPtr context = PythonQt::self()->getMainModule(); 
context.evalScript("print 'hello'\n"); 

. 그래서 나는 PythonQt::init();이 파이썬의 콘솔 출력에 어떤 일을한다고 가정합니다. 어떻게 든 리디렉션합니까? 어떻게 인쇄합니까?

Qt 4.8.6, PythonQt 2.1 및 Python 2.7.6입니다.

답변

1

https://sourceforge.net/p/pythonqt/discussion/631393/thread/33ad915c을 읽은 후 PythonQt::init();은 파이썬 출력을 PythonQt :: pythonStdOut 신호로 리디렉션합니다.

PythonQt::init() 선언은 기본적으로 RedirectStdOut을 설정 때문입니다

static void init(int flags = IgnoreSiteModule | RedirectStdOut, const QByteArray& pythonQtModuleName = QByteArray()); 

그래서이 이제 작동합니다

PythonQt::init(PythonQt::IgnoreSiteModule); 
PythonQtObjectPtr context = PythonQt::self()->getMainModule(); 
context.evalScript("print 'hello'\n"); 

또는 양자 택일로, 나는 신호를 연결할 수 있습니다 :

QObject::connect(PythonQt::self(), SIGNAL(pythonStdOut(const QString&)), this, SLOT(Print(const QString&)));