当前位置: 首页 > article >正文

Qt 调用执行 Python 函数

一.环境

Qt 5.15.2
python-3.12.5

二.安装

1.安装python-3.12.5.exe
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三.配置

1.设置环境变量
在这里插入图片描述
2.设置Qt 编译环境
在这里插入图片描述
在这里插入图片描述
3.新建Python文件
在这里插入图片描述在这里插入图片描述
4.运行
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四.源码

1.修改pro文件
在这里插入图片描述
2.testPy.py
注意: .py文件需要拷贝到build目录下

def myPrint(string):
    print(string)

def add(a,b):
    return (a+b)

3.mainwindow.cpp

#undef slots
#include <Python.h>
#define slots Q_SLOTS

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    Py_Initialize();
    if ( !Py_IsInitialized() )
    {
        qDebug("python 初始化失败!");
    }
    PyRun_SimpleString("import sys");
    PyRun_SimpleString("sys.argv = ['python.py']");
    PyRun_SimpleString("sys.path.append('./')");

    //导入testPy.py模块
    PyObject* pModule = PyImport_ImportModule("testPy");
    if (!pModule)
    {
        qDebug("Cant open python file!\n");
    }

    //调用Python函数 myPrint
    PyObject* pFunc1= PyObject_GetAttrString(pModule,"myPrint");
    if(!pFunc1)
    {
        qDebug()<<"Get function myPrint failed";
    }

    PyObject_CallFunction(pFunc1,"s","123"); //函数输入参数

    //调用Python函数 add

    PyObject* pFunc2= PyObject_GetAttrString(pModule,"add");
    if(!pFunc2)
    {
        qDebug()<<"Get function myPrint failed";
    }

    PyObject* pParam = PyTuple_New(2);  //2个输入参数
    PyTuple_SetItem(pParam,0,Py_BuildValue("i",15));
    PyTuple_SetItem(pParam,1,Py_BuildValue("i",16));

    PyObject *FuncBack = PyObject_CallObject(pFunc2,pParam);

    int rtn = 0;
    PyArg_Parse(FuncBack,"i",&rtn);
    qDebug() << "Func2 返回值 = " << rtn;


    //结束,释放python
    Py_Finalize();

}

五.运行

在这里插入图片描述


http://www.kler.cn/news/282884.html

相关文章:

  • zookeeper服务器动态上下线监听案例
  • 【MySQL数据库管理问答题】第4章 配置 MySQL
  • SpringBoot应用打成ZIP部署包
  • 18.神经网络 - 非线性激活
  • 【机器学习】梯度下降算法
  • 源码编译并安装Squid的方法
  • BEVDet4D:多帧时序信息融合方法详解
  • 富格林:正规方式顺利盈利出金
  • 性能测试的基本概念
  • Pycharm安装报错:Cannot detect a launch configuration 解决办法
  • 吴恩达机器学习笔记 四十五 基于内容的过滤的tensorFlow实现
  • 怎么解决 hash 碰撞,用 C++ 实现 hashMap?
  • Nosql数据库redis集群配置详解
  • Nginx轮询负载均衡配置指南:实现高效请求分发
  • docker常用命令使用dockerfile构建镜像,推送到私有镜像仓库
  • 【AI绘画】Midjourney前置指令/describe、/shorten详解
  • 适配算能BM1684开发板,bmodel推理模型转换
  • 矩阵分块乘法的证明
  • C语言典型例题55
  • VScode打开json文件和md文件直观展示方法
  • 免费批量Excel文件合并、拆分工具
  • Linux系统结构
  • 加密软件的特殊功能有哪些
  • STM32 - 按键控制LED灯
  • 在centos中安装 --nmon性能系统监控工具
  • 【实战场景】敏感词过滤如何实现?
  • 阿里最新发布Qwen2-VL:看视频的AI到底能干些什么惊人的事?
  • gui.js可视化插件的使用
  • 前端需调用后端数据作为判断条件
  • spring揭秘14-JdbcTemplate概述与使用操作对象访问数据