2016-08-29 5 views
0

Я следую примерам в http://pythonqt.sourceforge.net/Examples.html, но PythonQt ничего не печатает на консоли. Я запускаю скрипт, который просто печатает hello, но ничего не печатается.PythonQt ничего не печатает

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

С другой стороны, если я исполню ее с помощью обычного питона вложения работает и hello печатается:

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

Что интересно, если я добавлю PythonQt::init(); перед тем Py_Initialize();, ничего не получает снова печататься. Поэтому я предполагаю, что PythonQt::init(); что-то делает для вывода на консоль python. Переадресовывает ли он каким-то образом? Как сделать печать?

Я нахожусь на Qt 4.8.6, PythonQt 2.1 и Python 2.7.6.

ответ

1

После прочтения https://sourceforge.net/p/pythonqt/discussion/631393/thread/33ad915c, кажется, что PythonQt::init(); перенаправляет вывод python на сигнал 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&)));