一、單選按鈕和按鈕組(QRadioButton)
- QRadioButton 是單選按鈕,該小部件提供了一個帶有文本標簽的單選按鈕(沒錯,本質上它還是一個按鈕)
- QRadioButton 是一個選項按鈕,可以打開(選中)或關閉(取消選中);單選按鈕通常為用戶提供“多選一”操作
- 在一組單選按鈕中,一次只能檢查一個單選按鈕;如果用戶選擇另一個按鈕,則先前選擇的按鈕被關閉
- 單選按鈕默認為autoExclusive(自動互斥)。如果啟用了自動互斥功能,則屬於同一個父窗口小部件的單選按鈕的行為就屬於同一個互斥按鈕組的一部分
- 當然加入 QButtonGroup 中能夠實現多組單選按鈕互斥
- 此外如果你有多組單選按鈕, 每組都應該有不同的父控件,或者不同的Layout(通常建議:多組單選按鈕,放到不同的 按鈕組 QButtonGroup 中)
- 信號:選中狀態改變
- 如果用戶操作點擊了按鈕組 QButtonGroup 中的一個按鈕, QButtonGroup 就會發出 buttonClicked 信號,可以這樣指定處理該信號的函數
buttongroup.buttonClicked.connect(function)
- 然后,在處理函數中調用 QButtonGroup 對象的 checkedButton() 函數,返回值就是被選中的按鈕對象,再調用這個返回的按鈕對象的 text() 方法得到選中文本,就可以知道是哪個選項被選中了
- 向按鈕組添加按鈕控件
- 當創建一個 QButtonGroup 時,我們可以使用 addButton() 方法添加按鈕到該按鈕組中
rbtn = QRadioButton(window)
btngroup = QButtonGroup(window)
btngroup.addButton(rbtn)
- 示例:
from PyQt5.Qt import *
app = QApplication([])
window = QWidget()
window.resize(300, 100)
window.move(300, 300)
rbtn1 = QRadioButton(window)
rbtn2 = QRadioButton(window)
rbtn3 = QRadioButton(window)
rbtnA = QRadioButton(window)
rbtnB = QRadioButton(window)
rbtnC = QRadioButton(window)
btngroup1 = QButtonGroup(window)
btngroup1.addButton(rbtn1)
btngroup1.addButton(rbtn2)
btngroup1.addButton(rbtn3)
btngroup2 = QButtonGroup(window)
btngroup2.addButton(rbtnA)
btngroup2.addButton(rbtnB)
btngroup2.addButton(rbtnC)
rbtn1.setText("1")
rbtn1.move(50, 30)
rbtn2.setText("2")
rbtn2.move(90, 30)
rbtn3.setText("3")
rbtn3.move(130, 30)
rbtnA.setText("A")
rbtnA.move(50, 60)
rbtnB.setText("B")
rbtnB.move(90, 60)
rbtnC.setText("C")
rbtnC.move(130, 60)
window.show()
app.exec_()
二、多選按鈕和按鈕組(QCheckBox)
- QCheckBox 是多選按鈕,也叫復選框
- 復選框(QCheckBox),一般來說復選框通常用於表示可以啟用或禁用的應用程序中的功能,QCheckBox繼承自QAbstractButton,它提供了一個帶文本標簽的復選框
- QCheckBox(復選框)和QRadioButton(單選框)都是選項按鈕,這是因為它們都可以在開(選中)或者關(未選中)之間切換
- 區別是對用戶選擇的限制:單選框定義了“多選一”的選擇,而復選框提供的是“多選多”的選擇
- 只要復選框被選中或者清除,都會發出一個 stateChanged() 信號;
- 如果想在復選框狀態改變的時候觸發一個行為,請連接這個信號,可以使用 isChecked()方法來判斷復選框是否被選中,返回True,是選中,False是未被選
- 也可以用 setChecked(bool) 方法設置復選按鈕的狀態。參數為True設置為勾選,False設置為不選
- 除了常用的選中和未選中兩個狀態,QCheckBox還可選地提供了第三種狀態(半選)
- 如果需要第三種狀態,可以通過 setTristate() 方法來使它生效,並使用 checkState() 方法來查詢當前的切換狀態
- 通常建議:多組多選按鈕,放到不同的 按鈕組 QButtonGroup 中,按鈕組就是父控件
- 或者可以使用 QButtonGroup 的 exclusive 屬性,來控制 是否 只能單選一個選項(exclusive為真,則只能選中按鈕組中的一個,這個是默認的;exclusive為假,則可以選擇多個乃至全部)
- 信號:選中狀態改變
- 如果用戶操作點擊了按鈕組 QButtonGroup 中的一個按鈕, QButtonGroup 就會發出 buttonClicked信號,可以這樣指定處理該信號的函數
btngroup.buttonClicked.connect(function)
- QButtonGroup 設置為 單選 情況下:
-
在處理函數中調用 QButtonGroup對象的 checkedButton() 函數,返回值就是被選中的按鈕對象
-
再調用這個返回的按鈕對象的 text() 方法得到選中文本,就可以知道是哪個選項被選中了
-
- QButtonGroup 設置為 多選 情況下:
-
要得知哪些按鈕被選中, 可以 對所有該組中的 按鈕調用 isChecked() 方法 ,來判斷
-
isChecked() 主要是判斷復選框是否被選中,要是選中就返回True,否則返回False
-
- 此外,建議單選按鈕可以使用按鈕組;復選按鈕根據需要使用按鈕組,一般不建議復選按鈕使用按鈕組
三、按鈕
- QPushButton 就是常見的按鈕
- 信號:被點擊
- 當按鈕被點擊就會發出 clicked 信號,可以這樣指定處理該信號的函數
pushbutton.clicked.connect(function)
- 方法:改變文本
- 代碼中可以使用 setText 方法來改變按鈕文本
pushbutton.setText("按鈕")
- 方法:啟用、禁用
- 所有控件(繼承自 QWidget 類)都支持 禁用和啟用方法,禁用后,該控件不再處理用戶操作
- 啟用
pushbutton.setEnabled(True)
- 禁用
pushbutton.setEnabled(False)