我正在遵循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&)));