本篇目的:了解 QT 內常用元件的屬性編輯方法,以及在 wafer 分析工具內的應用方式
在 Day 10 中我們介紹了 QT 物件的應用與屬性修改方式。今天我們會接續前一天的內容,說明其他的物件使用方式,並且說明各物件可使用之情境。
作用:讓使用者挑選選項,另外也可以讓使用者輸入文字
可應用情境:讓使用者從固定的選項中選擇某項目,有時候也可以讓使用者輸入文字
常用靜態配置屬性:
editable - 是否可以編輯的屬性,需勾選才能讓使用者輸入文字

在 QT designer 中編輯項目 - 在 QT designer 中加入與調整選項的方式如下

常用動態配置屬性:
取值 - 使用 combobox.currentText() 即可取得 QComboBox 的值,另外與 QLineEdit 相同,取得的值都會是字串
在 Python 中編輯項目 - 加入或移除選項的方式的指令如下,通常應用於讀取設定檔後將選項寫入 QComboBox
# 加入項目,只能放入字串
# addItems 可以一次加入多個字串
# addItem 只能加入一個字串
combobox.addItems(['apple', 'banana'])
combobox.addItem('cherry')
# 移除項目時,要輸入選項對應之 index
# 注意 Python 的 index 都是從 0 開始
combobox.removeItem(2)
我通常讓 QComboBox 作為使用者選擇 SPEC 設定檔、計算項目的元件,原因是因為它要寫入或移除項目非常簡單;且多個選項集合在一元件內,可以讓畫面很簡潔。
作用:做出一組可單選的按鈕組
可應用情境:有多個相關聯選項,但只能選一個項目的單選情境
常用靜態配置屬性:
checked - True 代表已被圈選

按鍵群組 - QRadioButton 可以加入按鈕群組方便管理,設定方式為選擇多個 QRadioButton → 按右鍵 → 指定按鈕群組。設定後便會將指定元件加入 QButtonGroup

常用動態配置屬性:
讀取單獨元件的選擇狀態 - 使用 radiobutton.isChecked() 便可得到該元件的選擇狀態,True 為選擇、 False 為沒有選擇
讀取 QButtonGroup 的選擇狀態 - 使用 QButtonGroup 最大的好處是可以一次管理群組內的所有按鈕物件,可以避免使用一長串的 if-else 來判斷使用者選了什麼。
若要讀取 QButtonGroup 的選取狀態可使用以下指令
# 使用 checkedButton 會得到被選中的按鈕元件
buttongroup.checkedButton()
# 使用 checkedId 會得到被選中按鈕元件的 index
buttongroup.checkedId()
QRadioButton 的特性是同一群組內之 QRadioButton 會互斥、只能選擇一個選項,因此很適合用於多選一之情境。
作用:做出一個可選的按鈕
可應用情境:
需要讓使用者選擇,且可以對應到 Python 內 boolean 的情境 (例如要不要做卡控再計算產出)
需要多選的情境
常用靜態配置屬性:
checked - 若設為 True 代表已被圈選
按鍵群組 - QCheckBox 一樣可以加入 QCheckBox,加入同一群組可以簡單的讀取多個 QCheckBox 的狀態。另外需注意 QCheckBox 的 exclusuve 需設成 False,否則群組內的 QCheckBox 會無法多選

常用動態配置屬性:
讀取單個 QButtonGroup 的選取狀態:使用 checkBox.isChecked() ,若為 True 代表已被圈選;False 代表沒有被選
讀取 QButtonGroup 的選擇狀態 - 指令與 QRadioButton 該段相同
QCheckBox 與 QRadioButton 最大的差異在於 QCheckBox 沒有互斥概念,因此支援多選。另外 QCheckBox 若做為要不要執行某功能的開關,常與其他 widget 連動並控制該 widget 的狀態 (例如是否可編輯等)。

作用:就是表格,可做為顯示元件,或是輸入的元件
常用靜態配置屬性:
columnCount/ rowCount: 控制行/ 列數
(vertical/ horizontal) HeaderVisible: 是否隱藏行列標題

行列標題:設定方式如下

常用動態配置屬性:因為 QTableWidget 能使用的地方、修改的項目實在太多,後面 day 19 會有更詳細的說明
可應用情境:
做為顯示元件,例如顯示計算結果、使用者匯入的資料預覽等
作為設定元件,例如讓使用者輸入多項 SPEC 等
QTableWidget 的應用方式非常多,可以做為顯示元件、可以搭配鍵盤滑鼠事件讓使用者複製或貼上資料、也可以做為輸入元件,並同時支援 QComboBox 與 QSpinBox 輸入。
Day 10 與 Day 11 這2篇文章,主要目的是希望大家知道如何依照想要的目的、挑選適合的元件。放在 UI 內的元件可以分成兩種目的:讓使用者輸入資訊、顯示資訊給使用者。因此下圖針對這兩個需求繪製了一張路線圖,針對各種情境提供最常用的元件。

物件放進 UI 中了,但是放得有點亂。接下來我們會為 UI 加入排版