如何在C ++中运行PyQt应用程序?

时间:2019-04-02 12:27:09

标签: python c++ pyqt

我用QMainWindow编写了一个python脚本。现在,我需要在C ++进程中运行它,并使它们能够在以后进行通信。但是,在我用C ++运行窗口之后,窗口总是闪烁片刻然后退出。

我该如何解决这个问题?非常感谢!

Python脚本helloworld.py:

import sys
from pyqtgraph.Qt import QtCore, QtGui

class Window(QtGui.QMainWindow):
def __init__(self):
    super(Window, self).__init__()
        self.setWindowTitle("window app")
        print('created')
        self.show()

def test():
    app = QtGui.QApplication([])
    w = Window()
    sys.exit(app.exec_())

if __name__ == '__main__':
    test()

C ++:

#undef _DEBUG
#include <Python.h>
#include <iostream>

using namespace std;

int main(int argc, char** argv)
{
    Py_SetPythonHome(...);
    Py_Initialize();
    if (!Py_IsInitialized()) {
        return -1;
    }

    PyRun_SimpleString("import os, sys");
    PyRun_SimpleString("print(os.getcwd())");

    PyRun_SimpleString("import helloworld");
    PyRun_SimpleString("helloworld.test()");

    Py_Finalize();
    system("pause");

}

1 个答案:

答案 0 :(得分:0)

来自python文档

  

void Py_Finalize()

     

撤消Py_Initialize()进行的所有初始化   以及随后使用的Python / C API函数,并销毁所有   创建的子解释器(请参见下面的Py_NewInterpreter())和   自上次调用Py_Initialize()以来尚未销毁。理想情况下,   这将释放Python解释器分配的所有内存。这是一个   第二次调用时不操作(不调用Py_Initialize()   再次第一)。没有返回值;最终确定期间的错误是   忽略。

所以我猜您调用了函数,这就是行为发生的原因?

我建议在system("pause")前致电py_finalize