入門到入門
Qt 是一個功能強大的跨平台 C++ 應用程式開發框架,主要用於建立具備高階圖形使用者介面 (GUI) 的桌面、嵌入式及行動應用程式。它允許開發者編寫一次代碼,即可在 Windows、Linux、macOS、Android 和 iOS 等多種作業系統上編譯執行。– Google AI
P.S. 理論上發音同 cute,但它沒有特別可愛
CLI = Command Line Interface
GUI = Graphic User Interface
GUI 在 1984 年 Apple 推出 Macintosh 電腦之後盛行
據說下一個是 BCI
PyQt 是由一家名為 Riverbank Computing 的獨立公司開發的「Python 綁定(Python Bindings)」。
它將 Qt 的 C++ API 包裝起來,讓你可以用 Python 的語法來呼叫 Qt 的功能。
API (Application Programming Interface)是一組定義好的規則與協定,讓不同的軟體、系統或服務能相互連結。用戶端發出請求後,API 在後台處理並回傳資料。
| PyQt | PySide | |
|---|---|---|
| 開發公司 | Riverbank | Qt 官方 |
| 授權 | GPL | LGPL |
兩者在商業授權上有一點差異,但語法大致相同。
1 打開 vscode
2 建立一個資料夾
3 在終端機輸入指令
pip3 install pyqt64 在資料夾內建立一個 app.py
Application
最頂層的東西,可以理解為應用程式本體。一個程式通常只能有一個 Application 。
Window
名符其實的視窗,即顯示畫面的地方。
Widget
「元件」,是組成介面的最小單位。
舉凡按鈕、文字框等都是 Widget。
Layout
規範 Widget 的排列規則。
Qt 裡面有內建一些 Layout(水平、垂直等)
Signal
Signal 和 Slot 的組合是 Qt 的一大特色。
Signal 即信號,指當某件事發生時,元件發出的通知
(例如:按鈕被按下了)。
Slot
接收到信號後,執行的動作(可能是一個 Python 函數)
如果你也是小時候寫 Scratch 的人
我覺得概念 87% 像
Event Loop
GUI App 會隨時待命,一直偵測有沒有人發出訊號,是在後台運作的一個無窮迴圈。這套機制叫做 Event Loop。
from PyQt6 import QtWidgets
from PyQt6.QtWidgets import QApplication, QMainWindow
import sys
def hello():
app = QApplication(sys.argv)
win = QMainWindow()
win.setGeometry(200,200,300,300)
win.setWindowTitle("Hello World")
win.show()
sys.exit(app.exec())
hello()
你的第一支 PyQt 程式
app = QApplication(sys.argv)
建立一個 application
sys.argv 是接收一些外部指令(點擊打開檔案等)
win = QMainWindow()建立一個 window
win.setGeometry(200, 200, 300, 300)setGeometry (x, y, 寬, 高)
win.setWindowTitle("Hello World") 視窗標題
win.show()顯示視窗
在 PyQt 中,建立一個Widget後,預設是隱藏的。
sys.exit(app.exec())啟動 Event Loop
sys.exit() 關閉視窗結束事件迴圈時,確保 Python 環境乾淨地退出,並回傳狀態碼給作業系統。
def hello ():
...
hello()是沒有一定要包成函式
不過後面寫得比較複雜後都用函式處理會比較乾淨
主要講以下幾種
QLabel (文字 / 圖片)
QPushButton (按鈕)
QSlider (滑桿)
QTextEdit(文字框)
QCheckBox(勾選框)
QComboBox(下拉選單)
app = QApplication(sys.argv)
win = QMainWindow()
win.setGeometry(200, 200, 300, 300)
label = QtWidgets.QLabel(win)
label.setText("建北電資聯合寒訓")
label.resize(200, 200)
win.show()
sys.exit(app.exec())也可以在裡面直接包 HTML
label.setText("<h1 style = 'color: blue;'> 建北電資聯合寒訓 </h1> ")font = QtGui.QFont() # 利用 QtGui 中的 QFont 方法建立一個新字體
font.setFamily("JetBrains Mono Nerd Font") # 更改字體樣式
font.setBold(True) # 字體粗細
font.setItalic(True) # 斜體
font.setUnderline(True) # 底線
font.setStrikeOut(True) # 刪除線
font.setPointSize(20) # 字體大小
label.setFont(font) # 將 label 的字體設定為 font
label.adjustSize() # 讓 label 的尺寸根據文字長度調整或是用 QtGui.Qfont()
font = QtGui.QFont() # 利用 QtGui 中的 QFont 方法建立一個新字體
font.setFamily("JetBrains Mono Nerd Font") # 更改字體樣式
font.setBold(True) # 字體粗細
font.setItalic(True) # 斜體
font.setUnderline(True) # 底線
font.setStrikeOut(True) # 刪除線
font.setPointSize(20) # 字體大小
label.setFont(font) # 將 label 的字體設定為 font
label.adjustSize() # 讓 label 的尺寸根據文字長度調整或是用 QtGui.Qfont()