網站首頁 編程語言 正文
一、桌面應用軟件
桌面應用軟件是基于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安裝目錄下Scripts\pyside2-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_study\CV_Item\self\img_cls
更新spec文件命令:
pyinstaller -F --onefile main.spec
常用參數:
-F,-onefile產生單個的可執行文件
-p,設置python導入模塊的路徑(和設置pythonpath環境變量的作用相似)
--noconsole軟件啟動時不顯示命令窗
五、總結
原文鏈接:https://blog.csdn.net/qq_36171491/article/details/126059040
相關推薦
- 2022-03-24 android?Launcher?AppWidget添加步驟介紹_Android
- 2022-06-06 ?Redis?串行生成順序編碼的方法實現_Redis
- 2022-09-17 oracle臨時表空間的作用與創建及相關操作詳解_oracle
- 2024-03-10 【Redis】Redis的持久化(備份)
- 2023-01-29 Python使用pandas導入csv文件內容的示例代碼_python
- 2022-11-02 解析C/C++?Capstone?引擎源碼編譯問題_C 語言
- 2022-03-22 聚合函數和group?by的關系(理解group by 和聚合函數)
- 2023-06-18 Go語言實現關閉http請求的方式總結_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支