Python — PythonQt ничего не печатает

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

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

С другой стороны, если я выполню это с использованием простого Python-встраивания, это сработает и 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.

0

Решение

После прочтения 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&)));
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]