【发布时间】:2018-12-16 14:36:10
【问题描述】:
如果按下 Qt 应用程序中的按钮,我想使用 matplotlib 和 python 脚本绘制一些数据。从startPythonButton接收信号的槽定义如下:
void MainWindow::on_wdgt_startPython_clicked()
{
FILE* file;
Py_Initialize();
file=fopen("/home/user/test.py","r");
if(file<0){
Py_Finalize();
return;
}
PyRun_SimpleFile(file,"/home/user/test.py");
Py_Finalize();
fclose(file);
}
python脚本定义为:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,2*np.pi,100)
y=np.sin(x)
plt.plot(x,y)
plt.show()
当我运行 Qt 程序并单击 startPythonButton 时,绘图正常显示。但是,当我关闭绘图窗口并再次单击 startPythonButton 时,Qt 进程在尝试调用 PyRun_SimpleFile 时会收到一个 SIGSEGV。
有什么想法可能是错误吗?
所以事实证明第二个 fopen() 调用没有失败(例如不返回 NULL):
void MainWindow::on_wdgt_startPython_clicked()
{
FILE* file;
Py_Initialize();
file=fopen("/home/user/test.py","r");
if(file==NULL){
std::stderr << "Failed to open file." << std::endl;
Py_Finalize();
return;
}
PyRun_SimpleFile(file,"/home/user/test.py");
Py_Finalize();
if(fclose(file)!=0){
std::stderr << "Failed to close file." << std::endl;
return;
};
}
【问题讨论】:
标签: python-3.x qt segmentation-fault