1:首先你要先安装python;这个不缀述:
2:装好 之后,文件会有
pro文件加上:INCLUDEPATH += ./include
然后在pro文件右键添加静态库:把libs里面的都添加进去
3:错误总结:
参考:https://blog.csdn.net/itas109/article/details/78733584这里面的1-3写的都挺好的。
4:最终你会遇到python里面写了类然后又写了__init__函数 的。再用之前的调用就不好使 了
这是我的py文件
# -*- coding: utf-8 -*-
class GcodeToTrack:
def __init__(self,gcode_file,qwer):
#初始化类
#读取gcode文档
print(gcode_file)
print(qwer)
print("hello world")
def hello(self,adad):
print("hello")
print(adad);
这是我的代码:
#include <QCoreApplication>
#include <Python.h>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Py_Initialize();
if( !Py_IsInitialized() ){
return 0;
}
//执行单句Python语句,用于给出调用模块的路径,否则将无法找到相应的调用模块
PyRun_SimpleString("import sys");
QString setSysPath = QString("sys.path.append('%1')").arg(QCoreApplication::applicationDirPath());
PyRun_SimpleString(setSysPath.toStdString().c_str());
//导入hello.py模块
PyObject* pModule = PyImport_ImportModule("TransferKRL");
if (!pModule) {
QString infoData = "Can not open python file!";
qDebug() << infoData;
return 0;
}
PyObject *pyClass = PyObject_GetAttrString(pModule, "GcodeToTrack");
PyObject *pConstruct = PyInstanceMethod_New(pyClass);
//创建参数 参考https://blog.csdn.net/yangjf91/article/details/93062961?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
//调用的正确方法(带有__init__函数的):https://blog.csdn.net/hnlylyb/article/details/89498651?utm_medium=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-9.nonecase&depth_1-utm_source=distribute.wap_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-9.nonecase
PyObject* pParams = PyTuple_New(2);
PyTuple_SetItem(pParams, 0, Py_BuildValue("s", "ArcWall.ngc"));
PyTuple_SetItem(pParams, 1, Py_BuildValue("s", "trackFile03.csv"));
PyObject* pIns = PyObject_CallObject(pConstruct,pParams);
PyObject* pFunhello= PyObject_GetAttrString(pIns,"hello");
PyObject* pParams1 = PyTuple_New(1);
PyTuple_SetItem(pParams1, 0, Py_BuildValue("s","ArcWall.ngc"));
PyObject *FuncTwoBack = PyObject_CallObject(pFunhello, pParams1);//获取返回值
int res = 0;
PyArg_Parse(FuncTwoBack,"i",&res);//转换返回类型
qDebug()<<"res:"<<res;
Py_Finalize();
return a.exec();
}