qt调用python_在Qt中调用python,读取csv文件,实现K近邻算法(一)

目录:

1.从Qt中调用py脚本里的一个无参函数,功能:打印"hello python"

a)相关配置

b)踩过的一些坑

正文:

1.首先在Qt中创建一个Qt Widgets Application(当然其他的也行)

我电脑里面的是python35,64位的,所以要用64位去编译它,不然会出错。

这里我用的是

2.然后在项目中添加一个python文件

最后结构目录如下:

修改python和c++文件

#!/usr/bin/env python#-*- coding: utf-8 -*-#coding=UTF8

defhello():print("Hello Python")

修改mian.cpp

#include "mainwindow.h"#include #include #include

int main(int argc, char*argv[])

{

QApplication a(argc, argv);//MainWindow w;//w.show();

Py_Initialize();//初始化py模块if( !Py_IsInitialized() )

{return -1;

}

PyRun_SimpleString("import sys");//设置py脚本的路径

PyRun_SimpleString("sys.path.append('./')");//当前路径

PyObject* pModule = PyImport_ImportModule("test_py"); //这里的test_py就是创建的python文件if(!pModule) {

qDebug()<< "Cant open python file!\n";return -1;

}

PyObject* pFunhello= PyObject_GetAttrString(pModule,"func2"); //这里的hello就是python文件定义的函数if(!pFunhello){

qDebug()<

}

PyObject_CallFunction(pFunhello,nullptr);//调用hello函数

Py_Finalize();//释放py模块return a.exec();

3.运行程序

qmake 然后构建 最后运行

错误1:找不到 python.h

出错原因:我们在qt中调用了Python.h,但是没有添加python的相应动态链接库

解决办法:在.pro工程文件中添加相应的头文件和库文件

INCLUDEPATH += D:/Python/include

LIBS+= -LD:/Python/libs/

-l_tkinter/

-lpython3/

-lpython35

注意:1)这路径是你自己电脑里装python的文件路径

2)-L 和-l(这里是小写的L)后面直接跟路径和文件名,不能有空格,不然会报错,LNK1146: 没有用选项“/LIBPATH:”指定的参数

错误2: error: C2238: 意外的标记位于“;”之前

出现原因:由于QT中定义了slots作为关键了,而python3中有使用slot作为变量,所以有冲突

解决方法:在python的object.h中 slots冲突,因此修改object.h,我的object.h路径:D:\Python\include\object.h

然后保存qmake 构建 运行

出现错误: error: LNK1104: 无法打开文件“python35_d.lib

问题: 无法打开 python36_d.lib 的问题

解决: Anaconda3 的 pyconfig.h 文件中做出修改。 我的pyconfig.h路径:D:\Python\include\pyconfig.h

将315行的,python36_d.lib改成python36.lib

同时注释359行

噢,对了,因为我在前面设置加载py是 ''./''所以是在当前文件夹下面

需要在项目中取消Shadow bulid的勾选,让debug文件在当前文件夹下,养成这个好习惯,不然以后老是会出现找不到xxxx而出错

OK,然后在qmake 编译 运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值