win10 + QT5.9.3 调用python程序(.py)

1 前言

最近项目中需要调用别人写的python程序,所以在网上找了一些QT调用python的资料,个人感觉挺简单的吧,自己写了一个Demo测试了一下。

2 python环境部署

python下载地址:https://www.python.org/downloads/

可以下载自己需要的版本,但是在下载的时候需要注意是32位还是64位,要看你使用的QT是32位还是64位的,

然后在安装的时候注意勾选 添加到环境变量选项,如果没有勾选则需要手动添加环境变量

3 编写python程序

可以使用notepad++编写一个简单的python程序,将python文件命名为“helloword.py"

def hellowordFunc():
    print("helloword")

4 修改python与qt的冲突问题

从网上找了资料,我就直接修改这个地方了,修改python安装目录里的“/include/object.h"文件,用找到“PyType_Spec”

然后修改如下:

#undef slots
typedef struct{
    const char* name;
    int basicsize;
    int itemsize;
    unsigned int flags;
    PyType_Slot *slots; /* terminated by slot==0. */
} PyType_Spec;
#define slots Q_SLOTS

5 QT调用

 1)创建一个QT工程

    详细步骤不解释了,会QT的都明白

 2)配置python环境

在.pro文件中添加python的include目录以及,lib目录,如下

INCLUDEPATH += -I  D:\Python36-32\include
LIBS += -LD:\Python36-32\libs -lpython36

3)在cpp文件中包含头文件

#include <Python.h>

4)在cpp中添加代码

//进行初始化
    Py_Initialize();
    //如果初始化失败,返回
    if(!Py_IsInitialized())
    {
        qDebug() << "IsInitialized: error";
    }
    //导入.py文件
    PyObject *pModule = PyImport_ImportModule("helloword");

    if(!pModule)
    {
        qDebug() << "ImportModule: error";
    }
    //hellowordFunc
    PyObject * pFuncHello = PyObject_GetAttrString(pModule, "hellowordFunc");
    //如果失败则返回
    if(!pFuncHello)
    {
        qDebug() << "GetAttrString: error";
    }
    //调用函数
    PyObject_CallFunction(pFuncHello, NULL);
    //退出
    Py_Finalize();

     执行带参数方法   

 PyObject * pFuncFile = PyObject_GetAttrString(pModule, "newFile");
    if(!pFuncFile)
    {
        qDebug() << "GetAttrString: error";
    }
    PyObject *args2 = PyTuple_New(1);
    PyTuple_SetItem(args2, 0, PyUnicode_FromString("d:/test_py.txt"));

    PyObject_CallObject(pFuncFile, args2);

5)解决无法加载“python36_d.lib"的问题

直接找到“D:\Python36-32\libs”中的“python36.lib"文件,复制一份并重命名为“python36_d.lib"

6 结束语

好了,到这里就完成了调用python程序的全过程,千万要注意python的32位与64位要与QT的32位和64位适配,并且要添加python相关环境变量。

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值