首页 > 编程语言 >QT中调用python中的函数

QT中调用python中的函数

时间:2024-07-08 18:23:27浏览次数:17  
标签:解释器 调用 QT python py Python Py include

1. 创建py文件例如 名为“python_script.py”的python文件:

# python_script.py
def greet(name):
    return "Hello, " + name + "!"

 

2. Qt的pro文件中包含python 的头文件和库

INCLUDEPATH += python解释器的安装目录\include
LIBS += -Lpython解释器的安装目录\libs -lpython38
例如:

   

 3. 包含<Python.h>头文件调用相关函数调用

 1 #include <QCoreApplication>
 2 #include <Python.h>
 3 #include <QDebug>
 4 int main(int argc, char *argv[])
 5 {
 6     QCoreApplication app(argc, argv);
 7     wchar_t *program = Py_DecodeLocale(argv[0], nullptr);
 8     //设置 Python 解释器的程序名 这个程序名通常用于生成错误消息、警告和其他与程序标识相关的信息(可选)
 9     Py_SetProgramName(program);
10     //设置Python解释器的路径 (可选)
11     Py_SetPath(L"D:\\Python\\Python38_64;D:\\Python\\Python38_64\\DLLs;D:\\Python\\Python38_64\\lib");
12     // 初始化Python解释器
13     Py_Initialize();
14     // 导入Python模块
15     PyRun_SimpleString("import sys");
16     //因为一般是将对应的py文件放入运行目录因此需要添加当前的路径
17     PyRun_SimpleString("sys.path.append('./')");
18     //创建模块指针
19     PyObject *pModule = PyImport_ImportModule("python_script");
20     if(!pModule){
21         qInfo() << "pModule is nullptr!";
22         PyErr_Print();
23         exit(-1);
24     }
25     //获取函数
26     PyObject *pFunc = PyObject_GetAttrString(pModule, "greet");
27     if(!pFunc){
28         qInfo() << "pFunc is nullptr!";
29         PyErr_Print();
30         exit(-1);
31     }
32     //组装参数
33     PyObject *pPara = PyTuple_New(1);
34     PyTuple_SetItem(pPara,0,Py_BuildValue("s","HKK"));
35     //调用函数
36     PyObject* pValue = PyObject_CallObject(pFunc, pPara);
37     qInfo() << "res:" << PyUnicode_AsUTF8(pValue);
38     //调用Py_DECREF来减少Python 对象的引用计数,当引用计数为 0 时,对象被销毁防止内存泄漏
39     Py_DECREF(pValue);
40     Py_DECREF(pPara);
41     Py_DECREF(pFunc);
42     Py_DECREF(pModule);
43     // 结束Python解释器
44     Py_Finalize();
45     return app.exec();
46 }

4.运行结果:

 

需要注意的几点:

1. 编译时会报slots冲突,将python头文件中对应的slots名称修改一下例如修改为m_slots

2.编译通过运行失败,将对应的python动态库放入运行目录,例如我使用的是python38.dll

3.将对应的py文件放入运行目录

 

标签:解释器,调用,QT,python,py,Python,Py,include
From: https://www.cnblogs.com/henkk/p/18290438

相关文章

  • python C API常用函数介绍
    PythonCAPI提供了一组函数和宏,允许开发者在C或C++代码中与Python解释器进行交互。以下是一些常用的PythonCAPI函数和宏:1.**初始化和结束Python解释器**:-`Py_Initialize()`:初始化Python解释器。-`Py_Finalize()`:结束Python解释器。-`Py_SetProgramNam(cons......
  • 使用Python下载Bing每日一图并设置为壁纸
    简介Bing搜索引擎每天都会展示一张精美的图片,这些图片不仅美丽,而且常常包含有趣的信息。想象一下,每天打开电脑,都能看到这样的美景,是不是很棒呢?本文将介绍如何使用Python脚本自动化下载Bing每日一图,并将其设置为我们的桌面壁纸。环境准备在开始之前,请确保你的计算机上安装了Pyth......
  • Python OpenCv对规则物体进行实时检测
    前言很多情况需要对物体进行检测,常规的方法也有很多种。但是检测出来的边缘一般都是非常多,结果也是非常杂乱的,显然这种结果不是我们想要的。如果颜色相较于背景非常鲜艳的可以调节hsv阈值再进行检测,如果是一直在运动的物体可以通过帧差法进行物体检测,还有很多高深的算法也可以进......
  • Java 如何在volatile内部调用接口
    在Java中,volatile关键字通常用于确保变量的可见性和有序性,而不是用来修饰接口或方法调用的。volatile修饰的变量会被立即同步到主存,并且在每次访问时都会从主存中重新读取,而不是从缓存中读取。这意味着对volatile变量的修改对所有线程都是可见的。然而,我们的需求似乎是在一个被......
  • python logger 使用记录
    1.简单使用importlogging#基本设置#如果没有设置,则可以使用该设置用于显示logging.basicConfig(level='DEBUG',datefmt='%Y-%m-%d%H:%M:%S',format='%(asctime)s[%(name)s]%(levelname)s%(message)s')logger=logging.getLogger(......
  • 【融合ChatGPT等AI模型】Python-GEE遥感云大数据分析、管理与可视化及多领域案例实践
    随着航空、航天、近地空间遥感平台的持续发展,遥感技术近年来取得显著进步。遥感数据的空间、时间、光谱分辨率及数据量均大幅提升,呈现出大数据特征。这为相关研究带来了新机遇,但同时也带来巨大挑战。传统的工作站和服务器已无法满足大区域、多尺度海量遥感数据处理需求。为解......
  • Python热门面试题三
    Python中的pass语句有什么作用?在Python中,pass语句是一个空操作(NOP,nooperation);它什么也不做,只作为一个占位符。其主要作用是在语法上需要语句的地方,但程序执行时又不需要执行任何操作时使用。pass语句可以用在函数的定义中、条件语句的分支里、循环结构中或者任何需要语......
  • 调用智谱清言的图像识别接口
    github地址:https://github.com/LLM-Red-Team/glm-free-api1.docker来取镜像并部署 拉取镜像dockerpullvinlic/glm-free-api:latest docker部署dockerrun-it-d--init--nameglm-free-api-p8000:8000-eTZ=Asia/Shanghaivinlic/glm-free-api:latest查看服......
  • 利用Python进行数据分析PDF下载经典数据分享推荐
    本书由Pythonpandas项目创始人WesMcKinney亲笔撰写,详细介绍利用Python进行操作、处理、清洗和规整数据等方面的具体细节和基本要点。第2版针对Python3.6进行全面修订和更新,涵盖新版的pandas、NumPy、IPython和Jupyter,并增加大量实际案例,可以帮助你高效解决一系列数据分析问题。......
  • python+anaconda环境搭建
    一:下载安装1、安装anacondaanaconda官网2、安装pycharmpycharm官网二:配置环境1、找到anaconda安装位置在系统环境变量中添加如下信息打开DOS框,输入conda--version,出现如下信息说明配置成功三:创建虚拟环境1、打开DOS框;输入(name表示自己虚拟环境的名称;version表示......