為了提高作業效率,需要一個可以自動生成多份相關聯的word檔案免去繁瑣復制粘貼作業的軟體,最后選定使用QT C++做界面和主要邏輯程式設計,對word的操作使用python寫好對應的函式,然后在QT中呼叫自己寫好的python函式完成相應的功能,由于這是第一次使用python 也是第一次將python嵌入QT中使用所以心中有以下幾個疑慮:
1.Python是如何操作word檔案的
2.QT中如何使用Python函式
3.按照QT程式的發布流程發布,是否會不兼容Python 使得軟體無法運行
對于如何使用python和如何在QT中呼叫pthon網上已經有許多寫的很好的文章了,這里會放上我學習參考的文章鏈接,本篇隨筆主要記錄,探討在QT中呼叫python語言后的軟體發布,
一.Python如何操作word檔案
Python操作word檔案我使用了docx模塊
教你怎么使用Python對word檔案進行操作 :
https://blog.csdn.net/wcg541/article/details/100999756
基本知道怎么使用docx模塊之后個人感覺參考官方檔案會更適合自身的開發,
Python docx:
https://python-docx.readthedocs.io/en/latest/
二.QT中如何呼叫Python函式
QT中使用C++呼叫python:
https://www.cnblogs.com/shenghl/p/4442528.html
常見問題:
https://blog.csdn.net/herr_kun/article/details/84570258
三.QT呼叫Python后如何發布程式
按照上面的兩個文章代碼的主要功能都實作的差不多了,這時候心里開始擔心這次QT C++程式內呼叫了另外的一種語言,使用QT的windeployqt.exe發布程式只包含了QT所需要的環境對于Python的環境并沒有打包,這樣會導致在沒有安裝Python的電腦上無法運行,把網上的文章基本都看過一次之后還是沒能解決,最終結合了多篇文章的做法自己又摸索了幾天終于解決了在裸機上無法運行的問題,下面先講講發布的流程:
1.制作python環境檔案夾
1.本次開發使用python3.7,首先新建一個檔案夾,命名為 “Python37”,
2.打開python安裝目錄如下:

3.復制檔案夾內的所有.dll檔案,DLLs,include,Lib,libs 檔案夾到第一步新建的Python37檔案夾內,復制好后如下圖:

4.將Python37檔案夾復制到QT的release檔案夾下(就是那個名字很長的檔案夾)如下圖:

2.在C++代碼中使用 Py_SetPythonHome 函式指定python庫 解釋器的路徑
Py_SetPythonHome((wchar_t *)(L"./Python37"));
Py_Initialize();
if ( !Py_IsInitialized() )
{
printf("Cant Py_IsInitialized !\n");
return ;
}
在調用python相關函式之前,先使用 Py_SetPythonHome((wchar_t *)(L"./Python37")) 指定好Python的庫和解釋器的位置,這里寫的是在當前目錄下的Python37檔案夾(網上的文章用的是壓縮包,我嘗試使用壓縮包出錯,并且python37檔案夾和python37壓縮包放在一起還會導致python37檔案夾找不到),
如果沒有將第一步制作的Python37檔案夾放對位置或者Python37檔案夾有問題編譯會報錯,
3.使用windeployqt.exe打包QT
這個操作在網上也是有很多文章這里就不具體講了
https://blog.csdn.net/Zhenggenno_1/article/details/80459066
4.拷貝相關檔案到發布好的QT檔案夾中
在第3步中我生成了demo1.2檔案夾,將我們第一步制作好的Python37檔案夾,程式中使用到的.py檔案以及Python37中的python3.dll python37.dll檔案一起復制到demo1.2檔案夾內,如下圖,圈出的是需要復制到demo1.2中的檔案:

至此,打包完成,
四.小結
1.使用Py_SetPythonHome 函式將python的庫和解釋器指定路徑必不可少,之前按照網上很多方法都沒有提及Py_SetPythonHome 函式的使用,如果在除錯階段Py_SetPythonHome 函式的傳參可以設定為python的安裝目錄,
2.本次使用的打包方法(制作Python37檔案)缺點在于檔案夾較大,網上有說使用Pyinstaller和py2exe先發布python程式發布后會生成dis檔案夾和base_library壓縮包代替這里制作的Python37檔案夾,但是我始終沒成功,
3.PyImport_ImportModule突然報錯時,檢查下.py檔案是否有問題(有可能修改后多了空格之類的導致.py檔案編譯不過),
參考:
https://blog.csdn.net/spygg/article/details/104738799
https://blog.csdn.net/qq_34510308/article/details/83621237
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/259099.html
標籤:其他
上一篇:(五)Mybatis從入門到入土——Mapper介面傳參多種方式決議
下一篇:超詳細 DNS 協議決議
