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 に答える