Qt | Cross-platform software development for embedded & desktop
PyQt Documentation v6.3.0 (riverbankcomputing.com)
關鍵字:Qt Python QtSide PyQt6 GUI PyCharm pyinstaller nuitka
前言
GUI開發里大名鼎鼎的Qt,C++開發,支持跨平臺跨設備。對Python也有完善API支持,如果工作中有快速開發GUI的需求,然后正好后臺服務是python的話,那PyQt就是絕配了。
PyQt目前已支持最新的Qt6,網上教程大多還是PyQt5,建議直接學習最新的PyQt6。
官方Qt的親兒子是PySide,建議直接學習最新的PySide6(支持Qt6)。
Qt開發步驟:
- 設計GUI,圖形化拖拽或手擼
- 響應UI的操作(如點擊按鈕、輸入數據、服務器更新),使用信號與Slot連接界面和業務
- 打包發布
安裝
如果不是開發Andriod等設備app,無需下載幾個G的Qt,直接pip安裝pyqt包就行,大概占用300MB空間,也包含了Qt Designer, PyUiC,qmlscene,qmltestrunner等工具。
目前PyQt最新是6.3.0,對應Qt為6.2。
Python IDE大家選自己順手的就行,這里以PyCharm為例。
Ubuntu
pip install --upgrade pip
pip install PyQt6 pyqt6-tools
Windows安裝
需要注意下,有時安裝后會出現ERROR: ImportError: DLL load failed while importing QtGui
告警,應該是pip安裝時處理包依賴有小問題,以如下步驟安裝:
# 創建虛擬環境:venv,或pipenv
pip install --upgrade pip
pip install PyQt6
# 備份PyQt6目錄到其他處:c:\users\kevinqq\.virtualenvs\pyqt6-demo\Lib\site-packages\PyQt6\
pip install pyqt6-tools
# 恢復PyQt6到原始目錄
第一個Qt程序
#!/usr/bin/python
import sys
from PyQt6.QtWidgets import QApplication, QWidget, QPushButton
def main():
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle('Simple')
btn = QPushButton('Hello PyQt6!', w)
btn.move(50, 50)
w.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()
一套代碼,Windows和Linux下都可運行,是不是很nice。
PyCharm配置
配置兩個工具
-
QtDesigner 圖形化拖拽來設計GUI
打開Pycharm,按快捷鍵Ctrl+Atl+S,打開設置界面,然后在工具選項里找到外部工具
image.png - PyUiC
這個是把designer生成的UI文件轉化為py文件的工具
程序:填Python目錄下的\Scripts\pyuic6.exe
實參:$FileName$ -o $FileNameWithoutExtension$.py
工作目錄:$FileDir$
完成后,在PyCharm目錄上點右鍵:External Tools,就能直接啟動QtDesigner 6.1.0或PyUiC了。
如果不使用PyCharm,用命令行運行,效果也是一樣的。
PyQt打包成exe可執行文件
pip install pyinstaller
pip install auto-py-to-exe
運行:auto-py-to-exe
- Script Location:選擇要打包的py主程序
- One File:選生成單一文件
- 不顯示命令行窗口
- Icon可設置圖標
- Advanced下,可設置UPX(從這里下載 https://upx.github.io/)
然后點擊“Convert .PY to .EXE”就會自動生成.exe文件了,在當前目錄output子目錄下。
大小為26MB,比純C++開發的肯定大不少,但換來的是快速開發。如果有要極致性能要求,可以等原型開發完后,再用C改寫。
- 復雜程序用UPX壓縮后會縮小不少,這里試了下,選upx壓縮選項后為22MB
- Linux下打包后為47MB,貌似更大,暫時未去調查
[2022-5-24更新] 打包的話,用nuitka
更適合,對PySide支持更好。壓縮后僅15MB左右。
pip install nuitka zstandard
# PyQt 26MB ==> 14.9MB
python -m nuitka --onefile --windows-disable-console --enable-plugin=pyqt6 <your_app>.py
# PySide 34MB ==> 16.8MB
python -m nuitka --onefile --windows-disable-console --enable-plugin=pyside6 <your_app>.py
[2022-5-24更新] PyQt與PySide的選擇:
- PyQt
PyQt要比PySide推出時間早得多,開發商是Riverbank Computing,GPLv3協議,如果閉源商用就會違反協議,后果自負。 - PySide
Qt for Python Documentation - Qt for Python
對比PyQt,PySide就要晚得多問世了,但它是Qt的親兒子,使用LGPL協議,可免費。目前PySide6已經很完善了,包括文檔。
如果你不想開源你的代碼,而又想免費使用Qt ,那選擇哪個很明顯了吧?兩者語法基本一樣的,絕大多數程序直接把import PyQt6
換成import PySide6
就可以了,不用擔心學習浪費。
參考:
pyqt6 - PyQt 中文教程 (gitbook.io)
PyQt6和pyqt6-tools在PyCharm2021的詳細配置方法裝