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

问题描述 投票:0回答:1

我用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");

}
python c++ pyqt
1个回答
0
投票

从python文档

void Py_Finalize()

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

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

我建议在system("pause")之前打电话给py_finalize

© www.soinside.com 2019 - 2024. All rights reserved.