Qt中用C++呼叫Python檔案的三種方法

StefanWang1發表於2018-03-27

感謝:https://www.cnblogs.com/xia-weiwen/p/7932379.html

http://www.jb51.net/article/91611.htm

https://blog.csdn.net/flyfrommath/article/details/52999100

環境:ubuntu Linux 16.04

Qt creator community 5.5.1

python3.5

1.外部工具法

a. 開啟Qt creator,在上方的選單欄中找到:工具——選項,點選進入。


b. 選擇:環境——新增目錄,目錄名字可以自己取,這裡我選擇RunPy2作為目錄名。回車確定。



c. 新增工具:工具名稱亦可自取,這裡我選擇Python3.5.


d. 配置外部工具:

說明:可以隨意書寫;

執行檔:即完成執行python檔案的外部工具,這裡由於我安裝了PyCharm,就直接選擇Pycharm中的python編譯器為外部工具,可以直接在PyCharm中安裝第三方庫,比較方便。當然可以用Linux自帶的Python直譯器:/usr/bin/python3.5.但是安裝第三方庫就比較麻煩。這裡可以參考:http://www.jb51.net/article/91611.htm  和https://blog.csdn.net/flyfrommath/article/details/52999100。

引數:按照圖示即可。%{CurrentDocument:FilePath}

工作目錄:圖示即可。%{CurrentDocument:Path}

Environment:QT_LOGGING_TO_CONSOLE = 1


e. 右擊專案名稱——新增新檔案,選擇新增Python File,名稱為test112,回車確定。

f. 編輯test112.py如下:


g. 測試執行工具——外部——RunPy——python3.5,在概要資訊中輸出結果。


2.Python官方提供的與C++互動程式設計方法。

a. 配置路徑和LIBS:網上大多數提供的是Python2.7的配置方法,由於我入門Python時學的是Python3,所以在此將Python3的路徑和LIBS用於Qt中。在Python官網,可以找到如下段落:該文章提供了配置INCLUDEPATH和LIBS的方法。

b. 針對不同的環境可能配置方法不同,這裡介紹一種能夠找到自己電腦最適宜的配置方法。

  • sudo updatedb
  • locate python3.5-config #得到python3.5-config的絕對路徑,我的是:/usr/bin/python3.5-config
  • 如果找不到python3.5-config,則是因為沒有安裝python3.5-dev,sudo apt install python3.5-dev即可
  • 開啟終端輸入:/usr/bin/python3.5-config --cflags #得到INCLUDEPATH的內容
  • 開啟終端輸入:/usr/bin/python3.5-config --ldflags #得到LIBS的內容
  • INCLUDEPATH += -I/usr/include/python3.5m -I/usr/include/python3.5m  -Wno-unused-result -Wsign-compare -g -fstack-protector-strong -Wformat -Werror=format-security  -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes
  • LIBS += -L/usr/lib/python3.5/config-3.5m-x86_64-linux-gnu -L/usr/lib -lpython3.5m -lpthread -ldl  -lutil -lm  -Xlinker -export-dynamic -Wl,-O1 -Wl,-Bsymbolic-functions


c . 注意!!!到此並沒有配置結束,由於我配置的是Python3.5,所以當改動已編譯執行通過的檔案後再次執行編譯指令會出現如下錯誤,我在Stack Overflow上找到了解決方法。在.pro檔案下新增:

CONFIG += no_keywords即可

d. 在main.cpp中main函式中編寫呼叫test112.py的程式。指令的具體含義大家可以參考:https://segmentfault.com/a/1190000000531613 


e. 編譯執行,結果如下:


f. 我在執行時,老是出現“can't open python file”問題,苦思無果。最後發現是程式中的“import numpy as np”有問題,因為這裡配置的python3直譯器是系統安裝的,與前面的PyCharm不同,沒有安裝第三方庫。關於第三方庫的安裝,大家可以參考:這裡可以參考:http://www.jb51.net/article/91611.htm https://blog.csdn.net/flyfrommath/article/details/52999100。

3.使用PythonQt庫

這裡大家可以參考:https://www.cnblogs.com/xia-weiwen/p/7932379.html。

我在編譯按照上述部落格操作時,出現了無法找到

 private/qmetaobjectbuilder_p.h
檔案的問題,但是搜尋整個就計算機發現確實存在此檔案。找了好久沒有找到解決方法,最後我把PythonQt的安裝資料夾放在了/opt/Qt5.5.1/5.5/gcc_64/include/QtCore/5.5.1/QtCore下,編譯通過。

此外,在Stack Overflow上也提供瞭解決辦法,點此檢視。


相關文章