QT——调用Python脚本

本文详细介绍了在Windows环境下,如何在Qt Creator中集成Python,以及在C++项目中通过Python3调用Python脚本时遇到的问题,如`Python.h`缺失、静态库链接、路径设置和命名冲突等,并提供了相应的解决办法。
摘要由CSDN通过智能技术生成

环境

  • Win10
  • Qt Creator 4.8.0 (Enterprise) MSVC64_bit
  • Anaconda Python3.7 64_bit

执行Python脚本

  1. 将Python集成到Qt中

工具->选项->环境->外部工具,添加->添加目录 (双击可任意更改名称这里更改为RunPy)->添加工具(双击可任意更改名称这里更改为Python3)。点击Python3,配置执行档、参数等配置:
执行档:python的安装目录,我这里是(F:\Anaconda3.5\python.exe),你自己找到自己安装的python.exe目录
参数:%{CurrentDocument:FilePath}
工作目录:%{CurrentDocument:Path}


2. 测试一个Python脚本

在QT项目上新建一个python文件,然后点击 工具->外部->RunPy->Python3,运行脚本即可。

c++中调用Python脚本

  1. 导入静态库

项目文件下右键–添加库–然后外部库,剩下的如下图所示:



2. 新建python文件放在和QT的EXE文件在同一目录下


3. 测试代码

最后记得qmake, 然后构建,最后运行。

  • main.cpp
#include <Python.h>
Py_Initialize();
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.argv = ['python.py']");
PyRun_SimpleString("sys.path.append('./')");
PyObject* pModule = PyImport_ImportModule("dsdfs");
if (!pModule)
 {
     qDebug()<<"Cant open python file!\n";
 }
qDebug()<<"file of python ac been opened";
PyObject* pFunhello= PyObject_GetAttrString(pModule,"hhh");
if(!pFunhello){
    qDebug()<<"Get function hello failed";
}
//调用temperImg函数
PyObject_CallFunction(pFunhello,NULL);
//结束,释放python
Py_Finalize();

常遇到的坑

  1. 找不到Python.h

添加静态链接库

  1. error: C2238: 意外的标记位于“;”之前

如果修改了文件,一定需要保存文件。 然后还需要执行qmake, 构建,运行步骤。

  1. error: expected unqualified-id before ‘;’ token

由于QT中定义了slots作为关键了,而python3中有使用slot作为变量,所以有冲突。打开object.h文件,如下图进行修改即可。

  1. 无法打开python文件

python文件放在和QT的EXE文件在同一目录下即可。

  1. 不要将python文件命名为test.py或将函数命名为fun(),运行会报错找不到.py文件。

  2. error: LNK1104: 无法打开文件“python37_d.lib”

include文件夹下找到pyconfig.h文件,将python37_d.lib更改为python37.lib


7. numpy版本过高导致环境错误,建议使用numpy1.16.0
8. 提示你找不到 python37_d.lib 怎么办?

把libs文件夹下的python37.lib文件,重新拷一份回来并且重命名为python37_d.lib就行了.


9. anaconda的环境配置一定要先配置好,不然python相关库将会导不进去。

记得在 用户变量的path (不是系统变量)中添加以下路径:D:\Anaconda3;D:\Anaconda3\Library\mingw-w64\bin;D:\Anaconda3\Library\usr\bin;D:\Anaconda3\Library\bin;

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值