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();
}