1. 程式人生 > >在Qt中調用python,讀取csv文件,實現K近鄰算法(一)

在Qt中調用python,讀取csv文件,實現K近鄰算法(一)

修改 ref log nali show ofo ica blog 讀取csv文件

目錄:

1.從Qt中調用py腳本裏的一個無參函數,功能:打印"hello python"

  a)相關配置

  b)踩過的一些坑

2.從Qt中調用py腳本裏的一個有參函數並接收返回值 ,功能:實現 return a+b

3.從py中讀取csv文件,並進行一些切片分類處理

4.在py中編寫K近鄰算法

正文:

1.首先在Qt中創建一個Qt Widgets Application(當然其他的也行)

技術分享圖片

我電腦裏面的是python35,64位的,所以要用64位去編譯它,不然會出錯。

這裏我用的是

技術分享圖片

2.然後在項目中添加一個python文件

技術分享圖片

最後結構目錄如下:

技術分享圖片

修改python和c++文件

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#coding=UTF8
def hello():
    print("Hello Python")

修改mian.cpp

#include "mainwindow.h"
#include <QApplication>
#include <Python.h>
#include <QDebug>

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()<<"Get function hello failed"; return -1; } 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 編譯 運行

  技術分享圖片

在Qt中調用python,讀取csv文件,實現K近鄰算法(一)