前言
Python 的 GUI 框架有很多種,之前用過一個超容易入門的 wxPython,不過總覺得有點太陽春,於是開始研究 PyQt。
Qt 是一個跨平台的 GUI 框架,支援 Windows、MacOS、Linux 等各大作業系統,其主要使用的程式語言是 C++,但想要在 Windows 上開發 C++ ⋯⋯摁想到要安裝 Compiler 我就頭痛,於是說到跨平台、最容易安裝、又最好入門的程式語言就是 Python 了,所以 Qt 同時推出了一個 Qt for Python,讓大家可以開心的用 Python 來編寫 GUI 應用程式。
安裝
首先需要依序安裝以下東西:
- Python – 建議 3.7 以上版本,MacOS 建議用內建的 brew 工具安裝
- PyQt5 – 請到 Terminal 裡面輸入
pip install PyQt5
- Qt Designer – 用來設計 GUI 長相的工具
開發流程大致如下:
- 先用 Qt Designer 設計好界面,產生一個
.ui
檔 - 進 Terminal 輸入以下指令產生可引入的
.py
檔pyuic5 -x example.ui -o example_ui.py
主程式產生畫面用 - 建立一支主程式
.py
檔引入上一步做好的.py
檔們,就可以執行主程式囉!
界面設計
打開 Qt Designer,New 一份 UI 設計檔,然後就在選 Template 卡住了 XD
除了繼承自不同 Class 之外,這幾個的主要差異是用途的不同:
- Dialog 系列的就是做彈出對話框那種用的
- Main Window 指的是主程式入口用,就是 GUI 打開時的第一個畫面
- Widget 是用來嵌入主畫面用的視窗群,可以想成是 Main Window 預設拿掉 Menu Bar 跟 Status Bar 的簡易版 XD
其實要用哪一個都可以,通常一個較完整應用程式會包含一個 Main Window 及數個 Widget 和 Dialog,但本範例較簡單只需要一個 Main Window 就夠了~按下 Create 之後就會出現一個空白的視窗畫面,這時直接存檔就可以得到我們所需要的第一個 .ui
檔案,這邊命名為 example.ui
。
產生可引入的Python檔
有了這份 .ui
檔,裡面就描述了 GUI 要長什麼樣子的各種資訊,但是這些資訊在 Python 中並無法被直接使用,所以要先轉檔成 .py
檔以提供我們的 Python GUI 程式使用,這個指令在安裝 PyQt5 時就一併裝好了所以可以直接使用。
pyuic5 -x example.ui -o example_ui.py
這時其實產生出來的 .py
檔就已經可以獨立運作了。
python3 example_ui.py
雖然只是開啟一個空畫面,但我們的第一支 GUI 應用程式就這麼完成了!
搞定!
並沒有。如果我們為了增加功能開始在 example_ui.py
裡面 Coding 的話就完蛋了。因為每當我們修改完 .ui
檔案之後都要重新產生一次這個 .py
檔然後就覆蓋掉了,所以建議完全不要編寫這個產生出來的檔案。
建立主程式
因此最後一步就是,建立一支編寫功能用的 .py
主程式檔來引入它,這裡命名為 example_main.py
。
from PyQt5 import QtWidgets, QtCore, QtGui
import example_ui
class Main(QtWidgets.QMainWindow, example_ui.Ui_MainWindow):
def __init__(self):
super().__init__()
self.ui.setupUi(self)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = Main()
window.show()
sys.exit(app.exec_())
看起來相當複雜,但相信我這已經是我看過最簡單的寫法了。如果能夠理解的話,產生GUI佈局的關鍵就是第 11 行 setupUi
這個 Method。
python3 example_main.py
再執行一次,這次我們要跑的檔案是 example_main.py
,應該會看到跟剛剛一樣的空白畫面,喔耶成功。
雖然一個功能都沒有實作還很無聊,但看到畫面出來的瞬間還是有感動一下。
下一篇來講基本的界面設計。
用 Qt Designer 來設計 PyQt GUI 應用程式界面
References