Я следую за примерами в 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.
После прочтения 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&)));
Других решений пока нет …