首頁 > 軟體

Python詳細介紹模型封裝部署流程

2022-08-17 14:00:03

一、桌面應用軟體

桌面應用軟體是基於GUI(Graphical User Interface,圖形化使用者介面)互動式程式,需要實現GUI庫實現前端互動。

Python常見的GUI庫

  • TKinter:基於Tk的Python庫,這是Python官方採用的標準庫,優點是作為Python標準庫、穩定、釋出程式較小,缺點是控制元件相對較少;
  • wxPython:基於wxWidgets的Python庫,優點是控制元件比較豐富、缺點是穩定性相對差點、檔案少、使用者少;
  • pyQT5,Pyside2:基於Qt的Python庫,優點是控制元件比較豐富、跨平臺體驗好、檔案完善、使用者多、缺點是庫比較大,釋出出來的程式比較大;
  • Qt Designer:Qt是一個1991年由Qt Company開發的跨平臺C++圖形化使用者介面應用程式開發框架;
  • PyQT5:"Riverbank Computing"公司早期的python GUI開發工具庫,是QT與Python的結合,但並非Qt公司出品,屬於“義子”;
  • Pyside2:2018年7月,Qt公推出的工具庫,它提供了對Qt5.12+完整框架的存取,簡單點來說就是在Python下使用Qt,即Qt的“親兒子”;使用上PyQt5與PySide2差別很小,介面呼叫幾乎一模一樣。

程式打包工具:Pyinstaller

下圖為Python桌面應用軟體開發大體的技術架構。

圖1 軟體技術架構

二、Pyside2&Qt designer

(1)PySide2——控制元件

圖形介面的工具基礎:控制元件(widget)、訊號(signal)與槽(solt),控制元件表示前端介面可顯示/操作/互動的元素,如按鈕、輸入控制元件、展示控制元件等,供使用者點選、接受使用者輸入、展示內容、存放其它控制元件。

PySide2的安裝:

pip install PySide2 -i https://pypi.tuna.tsinghua.edu.cn/simple/

下面為一個PySide2程式的實現流程:

1.定義一個應用

2.定義主視窗

3.定義需要的控制元件

4.執行應用,進入事件迴圈

# -*- coding: utf-8 -*-
"""
# @file name  : 01_helloworld.py
# @brief      : 使用pyside編寫第一個軟體
"""
from PySide2.QtWidgets import QApplication, QMainWindow, QTextBrowser, QLabel
if __name__ == "__main__":
    app = QApplication([])  # UI應用程式管理應用
    # ================================================
    # 1. 定義主視窗
    window = QMainWindow()
    # 2. 定義文字方塊顯示
    label = QLabel(window)
    label.setText("Hello World!")
    # 3. 視窗顯示
    window.show()
    # ================================================
    app.exec_()  # 進入QApplication的事件處理迴圈

圖2 PySide2實現第一個GUI介面

(2)PySide2——訊號(signal)與槽(slot)

使用者對圖形介面的控制元件操作就會產生訊號,程式應能接收識別訊號,並進行相應的處理。特點訊號的處理常式稱為槽。

按鈕被點選時,向程式發出訊號,程式自動執行btn_slot函數。

# -*- coding: utf-8 -*-
"""
# @file name  : 02_signal&slot.py
# @brief      : 瞭解訊號與槽
"""
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QLineEdit
if __name__ == "__main__":
    app = QApplication([])  # UI應用程式管理應用
    # ================================================
    # first. 定義主視窗
    window = QMainWindow()
    window.resize(500, 400)
    window.move(300, 310)
    # 2. 定義按鈕控制元件
    def btn_slot():
        print("使用者點選了按鈕,將執行xxx")
    btn = QPushButton("我的按鈕", window)
    btn.clicked.connect(btn_slot)
    # 3. 單行文字方塊
    def text_slot():
        text = text_edit.text()
        print("檢測到文字方塊變動,當前文字方塊資訊為:{}".format(text))
    text_edit = QLineEdit(window)
    text_edit.move(100, 0)
    text_edit.setPlaceholderText('請輸入資訊...')
    text_edit.textChanged.connect(text_slot)
    # 視窗顯示
    window.show()
    # ================================================
    app.exec_()  # 進入QApplication的事件處理迴圈

圖3PySide2實現第二個GUI介面

(3)常用控制元件

1.按鈕:btn = QPushButton(“我的按鈕”,window)

2.單行文字方塊:text_edit = LineEdit(window)

3.標籤顯示:label = QLabel(window)

4.檔案選擇:path_file,filetype = QFileDialog.getOpenFileName(window,"選取檔案","./","All File(*);;Text Files(*.jpg)")

(4)Qt Designer

Qt Designer可以通過拖曳的方式完成複雜的介面設計,完成控制元件設計。Qt Designer生成的UI介面是一個字尾為.ui的檔案,其實是一個XML檔案。通過使用pyuic5命令將.ui檔案轉換成.py檔案,然後將.py檔案引入到自定義的Python程式碼中。主要分為以下四步:

  • 安裝:隨著pyside2安裝時,自動安裝
  • 啟動:Python安裝目錄下Scriptspyside2-designer.exe
  • 轉換:pyside2-uic xxx.ui > xxx.py
  • 使用:在QMainWindow中初始化xxx.py中的控制元件,然後定義槽函數

圖4 Qt Designer設計流程

三、模型封裝部署

封裝--物件導向三大特性之一,物件導向(Object Oriented Programming)的三大特性如下:

  • 封裝(Encapsulation):隱藏物件的屬性和實現細節,僅對外提供公共存取方式;
  • 繼承(Inheritance):使用已存在的類定義作為基礎建立新類的方法;
  • 多型(Polymorphism):“多種狀態”,介面的多種不同的實現方式即為多型;

類的設計三要素:

  • 類名:這類事物的名字;
  • 屬性:這類事物具有什麼樣的特徵;
  • 方法:這類事物具有什麼樣的行為;

圖5封裝模型的過程

  • 類名:Predictor;
  • 屬性:model,path_ckpt,device,transform;
  • 方法:preprocess,inference,get_model,get_transform;

四、Pyinstaller

Pyinstaller是一個用來將Python程式打包成一個獨立可執行軟體包,支援Windows、Linux和Mac OS,Pyinstaller可以讀取您編寫的Python指令碼。

Pyinstaller分析程式碼執行所需的所有模組,然後將這些檔案的副本和Python直譯器一起放在單個資料夾中,或者在單個可執行檔案中。

Pyinstaller的安裝:

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple/

軟體打包執行命令:pyinstaller xxx.py,完成後到root/dist/xxx下,找到xxx.exe

pyinstaller main.py --noconsole -F -p D:course_studyCV_Itemselfimg_cls

更新spec檔案命令:

pyinstaller -F --onefile main.spec

常用引數:

-F,-onefile產生單個的可執行檔案

-p,設定python匯入模組的路徑(和設定pythonpath環境變數的作用相似)

--noconsole軟體啟動時不顯示命令窗

五、總結

到此這篇關於Python詳細介紹模型封裝部署流程的文章就介紹到這了,更多相關Python模型封裝內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com