本篇目的:了解 QT 內常用元件的屬性編輯方法,以及在 wafer 分析工具內的應用方式
在 Day 9 中我們介紹了如何在 QT designer 中做出主視窗與加入元件,但一個正常的視窗應該符合以下2點:
功能上:設計的功能皆有對應的 UI 元件可供操作或設定
外觀上:不可因螢幕大小或拉伸,導致元件排列異常
Day 10 與 Day 11 會針對 QT 元件的功能性做說明。我們可以針對所需功能、選用適當配置,讓我們的工具有更好的使用者體驗。
在 Day 9 中有提到如何加入 UI 元件,而每個 UI 元件均有大量的屬性可以調整,例如字體大小、元件內部的內容、使用者是否可編輯等。元件的屬性可由 Python 指令設定,也可以先在QT designer 內調整。
若要在 QT designer 內設定元件的屬性,請先點選想編輯的元件,然後到右側的 ”屬性編輯器” 找到想編輯的屬性並做對應設定。

由於在 QT designer 內編輯的屬性,最後皆會以 Python 指令輸出到 py 檔內,而這個檔案我們不會去編輯它。因此我們適合在 QT designer 內編輯初始值,也就是 ”視窗每次剛開啟時,希望這時各元件呈顯的樣子”,例如預設的上下限值。
以下介紹各個元件的共通、且時常編輯的屬性
objectName: 物件的名稱,若要在 Python 內呼叫該物件都要用這裡設定的名稱
enabled: 是否可以編輯的屬性,若是 False 則使用者無法編輯
通常應用方式為先設定 False ,然後使用者執行某動作後將其改成 True 讓它可編輯,避免使用者誤觸
text: 顯示的文字內容
font: 修改文字格式,如大小、字體等
另外若我們需要在執行期(Runtime)編輯元件的屬性時、我們會在其他 py 檔以程式碼修改該物件的屬性。
在 QT designer 中事先編輯 UI 物件屬性,稱為靜態配置 (static configuration)
而在執行期間因 Python 指令而修改UI 物件屬性,稱為動態配置 (dynamic configuration)
以下會介紹我常用的 QT 元件,會以”作用 - 可應用情境 - 常手動編輯屬性”來做介紹。我會特別說明在製作統計工具時,這些元件的可能應用方向。以及在實際編寫 Python 腳本時常編輯的屬性。
另外在 PySide6 中所有的 object 前都有一個 "Q",我這裡會寫 PySide6 的名稱,因此若要在QT designer 找元件請省略 Q 即可。
作用:觸發該按鈕指定的功能
可應用情境:讓使用者觸發某功能
常用動態配置屬性:
enable - 設定按鍵是否可按。通常使用方式為預先設定無法使用按鍵,然後在使用者作業特定步驟後才解鎖按鍵,避免使用者誤觸
# pushButton_2 為 QPushButton
# setEnabled(True) 為按鈕可用,反之為不可用
pushButton.setEnabled(True)
“按下 UI 的按鈕會觸發特定功能” 應該是最直覺的軟體使用方法,因此 QPushButton 是絕大多數觸發 function 會選用的元件。另外 QPushButton 支援長按、短按、連點等多種觸發 function 的方式。

關於 QT 元件如何連接與觸發 function,會在 Day 16 說明
作用:顯示文字
可應用情境:提示使用者這個頁面/ 物件的對應功能
常用動態配置屬性:
label.setText(字串) 指令即可QLabel 就是一個顯示文字的物件,通常用來提示其他物件的功能。或是執行了某 function 後修改 QLabel 的內容做為給使用者的提示 (例如顯示設定值)。

作用:輸入一行簡單的文字
可應用情境:讓使用者輸入片號、自定義檔名等
常用動態配置屬性:
取值 - 使用 lineedit.text() 即可取得 QLineEdit 的內容,要注意 QLineEdit 一律回傳字串
寫入內容 - 若要反向寫入內容到 QLineEdit ,使用 lineedit.setText(字串) 即可
QLineEdit 就只能輸入單行文字、無法換行,且中文/ 英文/ 數字皆可輸入到 QLineEdit 中。因此很適合作為輸入片號等單行、英文數字夾雜的內容。

若要輸入的東西有一定格式 (例如固定清單、整數等),建議使用其他元件當輸入介面
作用:輸入整數 (QSpinBox) 或浮點數 (QDoubleSpinBox)
可應用情境:讓使用者輸入 SPEC、調整表格行列數等
常用靜態配置屬性:
上下限、位數與預設值 - 可以事先在 QT designer 中的屬性編輯器做設定,而 QDoubleSpinBox 有位數 (decimals) 可以設定

常用動態配置屬性:
取值 - 使用 spinbox.value() 即可讀取使用者輸入之內容。若元件是 QSpinBox 會回傳整數;若是 QDoubleSpinBox 會回傳浮點數
寫入內容 - 使用 spinbox.setValue(數字) 即可反向寫入數字,當然只能寫入整數或是浮點數
QSpinBox 與 QDoubleSpinBox 非常適合當作輸入 SPEC 的介面,因為它只能輸入數字、且可以卡控上下限,另外若將旁邊的箭頭隱藏可以達到更自然的顯示效果。

認識其他常用元件,以及確認各個元件的可以使用方向