Я хочу построить некоторые данные, используя matplotlib и скрипт на python, если нажата кнопка в приложении Qt.Слот, который получает сигнал от 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 получает SIGSEGV при попытке вызвать PyRun_SimpleFile
.
Любые идеи, где может быть ошибка?
Получается, что второй вызов 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;
};
}