0

我正在关注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();before Py_Initialize();,则不会再打印任何内容。所以我假设PythonQt::init();对 python 的控制台输出做了一些事情。它是否以某种方式重定向它?我如何让它打印?

我使用的是 Qt 4.8.6、PythonQt 2.1 和 Python 2.7.6。

4

1 回答 1

2

阅读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&)));
于 2016-08-29T20:42:00.797 回答