--- title: QT调用python代码 date: 2022年4月28日 author: TianZD top: true cover: true toc: true mathjax: false summary: 在QT Creator中调用python代码 tags: - QT - 编程 categories: - 编程 - QT abbrlink: c4a1e2a7 reprintPolicy: cc_by coverImg: img: password: --- [toc] # QT调用Python ## 前言 QT上位机程序和python程序交互: - QT调用python代码 - QT和python通过数据库交互 - QT和python通过网络编程交互 ## 环境 电脑:windows11 Anaconda中的opencv虚拟环境,python版本:3.9.7 Anaconda路径:`C:\ProgramData\Anaconda3` 虚拟环境路径:`C:\Users\12038\.conda\envs\opencv\` ## 配置 ### QT添加python库文件 在pro文件中添加 ```properties INCLUDEPATH +=C:\Users\12038\.conda\envs\opencv\include ############# python enviroment LIBS += -LC:\Users\12038\.conda\envs\opencv\libs\ -l_tkinter\ -lpython3\ -lpython39 ``` python路径\include python路径\libs ### 添加python文件 右键QT项目文件,新建python文件 ![image-20220221182133817](https://gitee.com/tianzhendong/img/raw/master//images/202202211821926.png) 编写python代码,这里为`test1.py` ```python # This Python file uses the following encoding: utf-8 # if __name__ == "__main__": # pass def hello(): print("hello world!") ``` ### QT调用 ```c #include #include //添加python #include using namespace std; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Py_Initialize(); //初始化 if ( !Py_IsInitialized() ) { return -1; } PyObject* pModule = PyImport_ImportModule("test1"); // 这里的test1就是创建的python文件 if (!pModule) { cout<< "Cant open python file!\n" << endl; return -1; } PyObject* pFunhello= PyObject_GetAttrString(pModule,"hello"); // 这里的hellow就是python文件定义的函数 if(!pFunhello){ cout<<"Get function hello failed"<