Qt调用Python遇到的问题(二)

2 篇文章 0 订阅
  1. C++调用Python需要将python安装目录下的include路径引用到项目工程中,将python对应的动态库python_version.lib目录链接。
  2. 在Qt中调用Python时,会出现编译报错问题,错误原因在于Qt的槽函数关键字和Python头文件中关键字重复,此时需要修改Python引用的头文件中的关键字即可将该编译错误解决。
  3. C++调用Python的一般步骤代码如下:
    Py_Initialize();//python初始化接口
    if (!Py_IsInitialized())
    {
    	printf("init python error\n");
    	return;
    }    
    PyObject *m_pInterfaceModule = NULL;//调用python文件的对象
    PyRun_SimpleString("import os");	//在C++中执行python语句,导入相关python中的模块
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");
    
    m_pInterfaceModule = PyImport_ImportModule("Interface");//设置要调用的python文件的文件名
    if (m_pInterfaceModule == NULL)
    {
    	PyErr_Print();
    	return;
    }	
    
    PyObject *pFun = NULL;//调用函数的对象
    pFun = PyObject_GetAttrString(m_pInterfaceModule,functionName.c_str());//functionName为要调用的函数名称
    
    if (NULL == pFun)
    {
    	PyErr_Print();
    	return ;
    }
    
    //简单处理可将所有数据类型都归结为有参数传递的类型,在传入之前将参数统一转换为string类型
    PyObject* pRet;//被调用的函数返回值的对象
    
    PyObject* pArg;//参数绑定的返回值
    pArg = Py_BuildValue("(s)", argValue.c_str());
    pRet = PyObject_CallObject(pFun, pArg);//pFun为被调用函数名,pArg为构造的绑定参数
    
    //pRet = PyObject_CallObject(pFun, NULL);//没有入参的调用,只需要函数名称,参数为NULL
    
    
    if (NULL == pRet)
    {
    	PyErr_Print();
    	return "";
    }
    
    char* res;
    int ret = PyArg_Parse(pRet, "s", &res);//返回值为字符串
    if (!ret)
    {
    	PyErr_Print();
    	return "";
    }
    
    cout << "res:" << res << endl; //输出结果
    

     

  4. 对于Python文件中的错误在C++中查看采用PyErr_Print()进行打印。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值