PythonQt不打印任何东西

时间:2016-08-29 20:35:58

标签: python c++ qt python-embedding 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。

1 个答案:

答案 0 :(得分: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&)));