下面来介绍分别用Qt Creator与Qt+VS2015调用Python代码,首先电脑中要安装Python IDE与Qt。我电脑中安装的是Python37,VS2015+Qt5.8、Qt Creator5.8.0,不管是哪个版本实现步骤都是一样的,均可参照。以及出现错误
Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named 'encodings' Current thread 0x000016d0 (most recent call first):的解决方法。
一、设置Python系统环境
这俩个路径最好是放在顶端,防止电脑中安装多个版本找不到对应的系统环境,具体解释原因与产生后果可以参照我前面的博客来了解,在这就不多叙述。
二、实现
1.Qt Creator的实现
1.0创建项目
1.1在*pro文件中加入Python中的对应路径,如下:
上面的路径要根据自己电脑是对应的路径来添加。
1.2 右键方案名称新建一个*.py文件
写入函数
注意:把创建的*.py文件移动到项目对应的EXE文件目录下,不然会找不到*.py文件。
11.3在*.cpp中写入代码
#include <QCoreApplication>
#include <Python.h>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//Py_SetPythonHome(L"D:/OSGeo4W64/apps/Python37");
//初始化python
Py_Initialize();
if (!Py_IsInitialized())
{
qDebug()<<" init failt";
return -1;
}
// 导入模块
PyObject *pModel = PyImport_ImportModule("hello");
if (!pModel)
{
qDebug()<<"Can't Open Python file \n";
return -1;
}
// 获取hello模块中的hello函数(无参数)
PyObject *pFunhello = PyObject_GetAttrString(pModel,"fun");
if (!pFunhello)
{
qDebug()<<"Can't find Function";
return -1;
}
// 调用hello函数
PyObject_CallFunction(pFunhello,NULL);
// 获取hello模块中的mult函数(有参数,有返回值)
PyObject *pMult = PyObject_GetAttrString(pModel,"mult");
if (!pMult)
{
qDebug()<<"Can't find Function";
return -1;
}
PyObject *args = Py_BuildValue("iii",2,3,4);//有几个参数就有几个i
PyObject *pRes = PyObject_CallObject(pMult,args);
int res =0;
PyArg_Parse(pRes,"i",&res);
qDebug()<<"res:"<<res;
// 结束,释放python
Py_Finalize();
return a.exec();
}
结果:
2.Qt +VS2015实现
2.1项目->属性->VC++ 目录->包含目录
2.2项目->属性->VC++ 目录->库目录
2.3项目->属性->链接器->输入->附加依赖项
3.4将接下来想要调用的py文件放入项目EXE目录下。在这里我用的还是上面的那个py文件。
3.5在*.cpp中写入代码,代码与上面的一样,所以在下面我就不贴上了。
结果:
三、总结:
如果出现错误:
Fatal Python error: initfsencoding: unable to load the file system codec
ModuleNotFoundError: No module named 'encodings'
Current thread 0x000016d0 (most recent call first):
说明第一步的系统环境没有配置好,可以查看自己的Python系统环境是否正确,如果确定正确但仍然出现这个错误,可以把上面代码中 Py_SetPythonHome(L"D:/OSGeo4W64/apps/Python37");的注释去掉,路径改成自己电脑上的。
如果出现错误:Can't Open Python file
说明没有把*.py文件放在项目的EXE文件目录下,导致程序找不到这个py文件。
其他的错误都可以根据qDebug()的提示来改。