我用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文档
void Py_Finalize()
撤消Py_Initialize()所做的所有初始化以及随后使用Python / C API函数,并销毁自上次调用Py_Initialize()以来创建但尚未销毁的所有子解释器(请参阅下面的Py_NewInterpreter())。理想情况下,这将释放Python解释器分配的所有内存。这是第二次调用时的无操作(不首先再次调用Py_Initialize())。没有回报价值;最终确定期间的错误将被忽略。
所以我想你调用了函数,这就是行为发生的原因?
我建议在system("pause")
之前打电话给py_finalize