功能:用qtcreator調用python文件。
1.環境:win10 64 位
python3.8 64位
mingw 64位
位數一定要匹配,如果是64位,全部為64位。包括環境變量中的設定值。
2.pro 配置
路徑選擇 自己盤上的安裝路徑
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../ProgramData/Python/Python38/libs/ -lpython38 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../ProgramData/Python/Python38/libs/ -lpython38_d INCLUDEPATH += $$PWD/../../ProgramData/Python/Python38/libs DEPENDPATH += $$PWD/../../ProgramData/Python/Python38/libs INCLUDEPATH += $$PWD/../../ProgramData/Python/Python38/include DEPENDPATH += $$PWD/../../ProgramData/Python/Python38/include #win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../ProgramData/Python/Python38/libs/libpython38.a #else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../ProgramData/Python/Python38/libs/libpython38d.a win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$PWD/../../ProgramData/Python/Python38/libs/python38.lib else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$PWD/../../ProgramData/Python/Python38/libs/python38_d.lib
3.main.cpp
1 #include "qtpyprj.h" 2 3 #include <QApplication> 4 #include <Python.h> 5 #include<QDebug> 6 #include<QString> 7 8 int main(int argc, char *argv[]) 9 { 10 QApplication a(argc, argv); 11 qDebug()<<"run"; 12 //設置了環境變量 13 Py_SetPythonHome((const wchar_t *)(L"D:/ProgramData/Python/Python38")); 14 //1.初始化Python解釋器 15 Py_Initialize(); 16 if(!Py_IsInitialized()) 17 { 18 qDebug()<<"無法初始化Python解釋器"; 19 return -1; 20 } 21 //2.導入文件模塊 py文件路徑的問題 22 PyObject * pModule = PyImport_ImportModule("qtpyprj"); //pModule 調用的文件名,沒有后綴 23 if (!pModule) 24 { 25 qDebug()<<"無法導入qtpyprj模塊"; 26 return -1; 27 } 28 29 //3.調用函數無參的 30 PyObject * pFunc_run = PyObject_GetAttrString(pModule, "run"); //pFunc 調用的函數名 31 if (!pFunc_run || !PyCallable_Check(pFunc_run)) 32 { 33 qDebug()<<"無法從qtpyprj模塊中加載run函數"; 34 return -1; 35 } 36 PyEval_CallObject(pFunc_run, NULL); 37 38 /*qDebug()<<"開始調用add "; 39 PyObject * pFunc_add = PyObject_GetAttrString(pModule, "add"); //pFunc 調用的函數名 40 if (!pFunc_add || !PyCallable_Check(pFunc_add)) 41 { 42 qDebug()<<"無法從qtpyprj模塊中加載add函數"; 43 return -1; 44 } 45 46 //4. 函數調用是有兩種,一種傳參數的,一種不傳參數的。 47 //傳參數有兩種方法: 48 //4.1.1創建方法1 49 PyObject *arg3 =PyTuple_New(2); 50 PyObject *arg1 = PyLong_FromLong(1050); 51 PyObject *arg2 = PyLong_FromLong(520); 52 53 PyTuple_SetItem(arg3,0,arg1); 54 PyTuple_SetItem(arg3,1,arg2); 55 56 //4.1.2創建方法2 57 // PyObject *args3 =Py_BuildValue("",8.5,103.2); 58 //4.2 調用python 的add函數 59 PyObject *fe=PyEval_CallObject(pFunc_add, arg3); //pFunc 調用函數 60 //4.3返回值處理 61 float res2=0; 62 PyArg_Parse(fe,"f",&res2);//是浮點數 63 64 //4.4 輸出結果 65 qDebug()<<"add(f):"<<res2; 66 */ 67 Py_Finalize(); //Py_Finalize 結束 68 return 0; 69 }
4.python 文件存放目錄
.py,.pyc與.exe3個文件同文件夾。
5.python文件
def run(): print("hello qt") def add(a,b): return a+b