一、单选按钮和按钮组(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)