QT(msvc2015_64)调用Python3脚本过程记录

前言:在做项目的过程中,需要使用QT来调用Python3写的脚本文件,经过一番折腾终于搞定,现记录在此方便查询。

0、开发环境

win10_64、QT5.10.1 msvc2015_64、Python3.7

1、QT中添加python脚本

QT Creator是支持添加Python脚本的,可以在工程文件上新添文件中选择“python”。

2、pro文件设置

在完成此步骤前,需保证用户机器上安装好了Python对应版本,作者机器上安装的是Python3.7。然后参照下图配置文件,用户参考自己机器中Python安装位置进行设置。

3、调用格式

添加头文件 #include <Python.h> ,调用Python脚本中的函数方法可参考如下:

#include <Python.h>

void MainWindow::function()
{
    //初始化Python解释器,这是调用操作的第一步
    Py_Initialize();
    if ( !Py_IsInitialized() )
    {
         return ;
    }
    //获取SVR.py模块的指针
    PyObject* pModule = PyImport_ImportModule("SVR");
    if (!pModule)
    {
           cout<< "Cannot open python file!\n" << endl;
           qDebug()<<"cannot open python file";
           return ;
    }

    //获取Pb_SVR函数的指针
    PyObject* pFun= PyObject_GetAttrString(pModule,"Pb_SVR");
    if(!pFun)
    {
       cout<<"Get function Pb_SVR failed"<<endl;
       qDebug()<<"Get function Pb_SVR failed";
       return ;
    }
    else
    {
       /* 用户代码  */
    }
    //销毁Python解释器,这是调用的最后一步
    Py_Finalize();
}

用户在编写好自己的任务函数后,此时若去编译工程,会报error:error: expected unqualified-id before ';' token的错,原因是Python中object.h头文件中定义的slots与QT自身的slots冲突,为解决该问题需修改头文件。(ps:Python脚本文件应使用Release模式下编译)

4、Python中object.h头文件的修改

找到object.h文件第440行左右的结构体。按下图所示,增添如黄框所示的两行代码即可。

5、运行

编译通过后,需将.py文件拷贝到可执行文件.exe同目录下,若用户编写的python脚本中调用了第三方库,则需要同时将第三方库也拷贝到该目录下。Python第三方库文件在安装目录下的Lib文件下的site-packages文件夹下里,如作者的在D:\CodingSoft\Python3\Lib\site-packages 。(注意:作者在release文件夹中添加第三方库文件时遇到一个运行错误,当我将高版本的第三方库文件导入时,运行程序会崩溃;但是当我导入低版本库时,程序却运行正常,怀疑与Python脚本中使用的三方库版本有关)

6、打包

在作者使用的机器上完成了整个程序的编译工作且能正常运行,现需要将其安装发布在目标机上运行,现记录过程。

这里采用最简单的方法:由于Python3的离线安装包大小也才200MB左右,因此完全可以直接在目标机上安装一个同版本的Python,然后将需要用到的第三方库文件导出到打包路径下,最后使用网上推荐的QT自带的windeployqt.exe打包工具打包就行。

7、参考博客

作者在调用Python脚本过程中所遇到的bug差不多就这些,当然,网上他人也遇到过其他问题,这里可参考下列链接解决。

https://blog.csdn.net/herr_kun/article/details/84570258

https://blog.csdn.net/alxe_made/article/details/83382159?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

https://blog.csdn.net/Sun_tian/article/details/104328564

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值