我用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");
}
答案 0 :(得分:0)
来自python文档
void Py_Finalize()
撤消Py_Initialize()进行的所有初始化 以及随后使用的Python / C API函数,并销毁所有 创建的子解释器(请参见下面的Py_NewInterpreter())和 自上次调用Py_Initialize()以来尚未销毁。理想情况下, 这将释放Python解释器分配的所有内存。这是一个 第二次调用时不操作(不调用Py_Initialize() 再次第一)。没有返回值;最终确定期间的错误是 忽略。
所以我猜您调用了函数,这就是行为发生的原因?
我建议在system("pause")
前致电py_finalize