Qt调用Python脚本Windows完整版(包含遇到的问题)

Qt调用Python脚本Windows完整版(包含遇到的问题)

一、前言

由于Python用的越来越广泛,很多功能也有了其他语言不可替代性,因此在Qt中如何调用Python代码呢。。。。经过亲身经历给大家一片完整的讲解(其中包含了几个我遇到的问题)希望对大家有所帮助。

二、工具准备

1.我认为任何Qt版本都是一样的处理方法。
2.我使用的是Python3.7.2(当前最新版),对于Python2会不会有其他问题不敢保证(你得知道自己Python的根目录,可以在终端中输入where python即可知道自己Python的位置,ps:打开终端的方法(这个还要讲的话。。好吧)WIN + R 输入cmd

三、打开Qt新建一个随便什么样的工程(假设是mainwindow类)

在这里插入图片描述
1.我们打开—(.pro)文件在最下面输入如下代码

INCLUDEPATH += D:/python3.7/include
LIBS += D:/python3.7/libs/python37.lib
(解释一下D:/python3.7是我python的根目录在根目录连有include和libs两个文件夹,具体根据你自己的文件夹进行修改)

在这里插入图片描述
2.此时编译一下,你会发现有两个错误:
错误1:

PyType_Slot *slots; object.h(445) : error C2059: 语法错误:“;”
object.h(445) : error C2238: 意外的标记位于“;”之前

解决方法:把slots改成slots1,我认为是和Qt自带的slots函数冲突导致的。再次编译该问题没了
错误2:
在这里插入图片描述
解决方法:我直接注释掉 hhhh;(//)

3.咋们不是要运行Python脚本吗?所以我们创建一个脚本;想必你是有Python基础的。我们直接创建一个文本文件改名为hello 后缀改为py就变成了一个python程序,在里面输入简单的如下代码:

def hello():
	print("hello ya")

最关键的来了:要想在Qt中找到这个文件你必须要把他放在debug目录下也就是找到你的工程中你的项目自动生成的一个MingGW-DeBug(名字最长的那玩意)然后进入debug目录,把你的脚本放在里面。很坑hhh,不过没办法。

3.在main.cpp添加如下代码:(注释已写,自己理解)最关键的是hello这个文件名和方法名

#include "mainwindow.h"
#include <QApplication>
#include <Python.h>
#include <QDebug>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Py_Initialize();
    if( !Py_IsInitialized() ){
        return 0;
    }
   //执行单句Python语句,用于给出调用模块的路径,否则将无法找到相应的调用模块
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.path.append('./')");
   //获取qt_python_fun.py模块的指针
    PyObject* pModule = PyImport_ImportModule("hello");//**最重要**
    if (! pModule){
       qDebug()<<QObject::tr("Can't open python file\n");
       return 0;
    }
   //获取hello函数的指针
    PyObject* pFunHandler = PyObject_GetAttrString(pModule,"hello");//**最重要**
    if (!pFunHandler){
       qDebug()<<QObject::tr("Get function hello failed\n");
       return 0;
    }
   //调用函数,传入参数为NULL
    PyObject_CallFunction(pFunHandler,NULL);
   //销毁Python解释器,这是调用的最后一步
    Py_Finalize();
    return a.exec();
}

好了也差不多了,最后编辑跑一下,你会发现你成功了。

在这里插入图片描述

之后添加文件就自己发挥吧!!!

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值