因為團隊內部調試時使用 GUI (圖形使用者介面 Graphical User Interface,縮寫:GUI) 小工具會比手動輸入 command 更有效率且較不易出錯, 同時考量儀控需求及網路上有許多 Python 的資源可參考. 站在巨人的肩上讓開發事半功倍.
前言
學習開發 Python 有多種途徑, 亦有多種 IDE 可以選擇, 我最早期曾用 Anaconda 安裝整個環境, 不只是 Jupyter notebook 我也有下載過 Pycharm , 都是很好的起手式, 但是都試過之後個人偏好微軟的輕量化 Visual studio code, 不只介面設計的很好看又簡潔, 環境配置不難還可以讓開發更直覺; GUI 庫因為看了很多大神分析利弊, 最後不選擇 PyQT 而選擇 PySide2 (最主要還是因為 LGPL 授權, PySide2 Introduction).
大綱
- 安裝 Python3.7
- 安裝 Visual studio code
- 安裝 PySide2
- 配置 VSCode
- 第一支 GUI 程式: Hello world
1. 安裝 Python3.7
現在已經釋出 Python 3.10, 但我選擇較為常見的 Python 3.7 (各版本 Python 下載: Python Download), 比較需要注意的是 Python3.x 並不相容 Python2.x, 網路上有許多方法可以共存切換.
下載 Python 3.7.9 安裝完成之後, 打開命令提示字元 (開始 → 輸入cmd) 輸入 python --version
做確認,
1 | C:\Users\blavince>python --version |
※注意安裝時不管有沒有改變預設安裝路徑, 都有讓 Python 加入環境變數, 否則再手動加入.
此時在cmd 輸入 python
可以進入交互模式, 只是在 VScode 上更便利.
1 | C:\Users\blavince>python |
2. 安裝 Visual studio code
3. 安裝 PySide2
安裝 Python3.7.9 後就自帶 pip 跟 pip3 了, 所以安裝 PySide2 只要在 cmd 輸入
1 | pip install PySide2 |
安裝完成之後直接在 cmd 輸入 python
進入交互模式後, 輸入 import PySide2
做確認.
1 | C:\Users\blavince>python |
4. 配置 VSCode
按 Ctrl+shift+x
或者主要工具欄上的延伸模組分頁鈕安裝 VScode 的 Python/PySide2 套件, 讓 GUI 開發的過程更方便, 這個套件可以在 VScode 上加入右鍵直接快捷創建新 .ui 檔以及打開 qt designer 做 GUI 的設計, 還有將 .ui 檔轉譯成 .py 檔案
延伸模組分頁鈕 | PySide2套件 |
---|---|
配置 PySide2
把 qt designer 路徑加入 C:\Users\blavince\AppData\Local\Programs\Python\Python37\Scripts\pyside2-designer.exe
到這裡就完成整個環境配置了, 可以寫個簡單的 Hello world 試試看.
5. 第一支 GUI 程式: Hello world
開發思路如下流程,
- 使用 qt designer 編輯 .ui 檔設計界面 (直接滑鼠拉元件)
- 將 .ui 檔轉譯 .py 檔
- 寫 .py 的入口函數執行 GUI 程式
1. 使用 qt designer 編輯 .ui 檔設計界面 (直接滑鼠拉元件)
在工作區的空白處右鍵 PySdie2: New Form in Designer/Creator
用 qt designer 來開啟一個 .ui 檔.
開啟 qt designer → Main Window → 建立(R)
然後在 qt designer 上拉一個 Label 元件到表單內修改成 HELLO WORLD → 儲存 Form.ui, 內容是 <xml>
們.
2. 將 .ui 檔轉譯 .py 檔
入口函數動態載入 .ui 檔或者先將 .ui 轉成 .py 入口函數再靜態載入兩種做法, 各有優缺點, 這裡介紹後者, 對著 Form.ui 右鍵 → PySide2: Compile Form to Python
→ 自動產出 Ui_Form.py
(等同於 cmd 的 pyside2-uic .\Form.ui -o .\Ui_Form.py
)
3. 寫 .py 的入口函數執行 GUI 程式
因為每次 UI_Form.py
的介面設計有更動後都會被覆蓋, 所以我們直接在裡面修改不好開發,
所以我習慣新增檔案 mainWindow.py
引入介面編寫邏輯, 而 UI_Form.py
為純介面檔案, 最後再新增一個 Entry.py
為入口函數
mainWindow.py
1 | from PySide2.QtCore import * |
Entry.py
1 | import sys |
然後用 python 去執行 Entry.py
對著 Entry.py 右鍵 → Run Python File in Teminal
→ GUI 程式 (等同於 cmd 的 python ./Entry.py
)
6. Python 導入 dll
若 myChipLibrary.cpp
導出有 get_chip_id 的 API 如下時 (myChipLibrary.dll
),
1 | EXPORT_DLL int __cdecl get_chip_id(PBYTE Res) |
將 myChipLibrary.dll
與 Python 檔放在同資料夾然後程式碼最上方加 ctypes
, 只要簡單的一行 CDLL 就可以導入並使用這個 API,
1 | from ctypes import * |
7. pyinstaller 打包成執行檔
可以直接打包成一個執行檔案 *.exe
, 但要注意如果將含有需授權或者版權問題.
從 pip 安裝
1 | pip install pyinstaller |
常用參數
常用參數介紹
pyinstaller -h 來查看參數
參數 | 說明 |
---|---|
-F | 打包成一個exe文件 |
–icon | –icon=圖標路徑 |
-w | 將背景黑控制台隱藏 |
-c | 使用控制台,無視窗 |
-D | 創建一個目錄,包含exe以及其他一些依賴性文件 |
舉例:
1 | pyinstaller.exe -F -w Entry.py |
會產生 build/
是打包過程的資料夾及 dist/
因為我們有加 -F
會產生只一個 Entry.exe.