QButtonGroup抽象按钮组
- 描述
- 提供 一个抽象的按钮容器, 可以将多个按钮划分为一组
- 不具备可视化的效果
- 一般放的都是可以被检查的按钮
- 继承自:QObject(不具备可视化)
- 功能作用
- 创建按钮组
QButtonGroup(parent) # 创建按钮组的同时设置父控件
- 添加按钮
addButton(QAbstractButton, id = -1) # 添加按钮到按钮组 # 如果id为-1,则将为该按钮分配一个id。自动分配的ID保证为负数,从-2开始。 # 如果要分配自己的ID,请使用正值以避免冲突
- 查看按钮
buttons() # 获取抽象按钮组中所有的按钮对象,返回列表 button(ID) # 根据ID获取对应按钮, 没有则返回None checkedButton() # 获取选中的那个按钮
- 移除按钮
removeButton(QAbstractButton) # 从抽象组移除指定按钮 # 不是从界面上移除,是从抽象关系上移除
- 绑定ID和获取ID
setId(QAbstractButton,int) # 给按钮设置(绑定)ID id(QAbstractButton) # 获取指定按钮对应的ID,如果不存在此按钮,则返回-1 checkedId() # 获取选中按钮的ID,如果没有选中按钮则返回-1 # 应用场景:设置ID, 方便识别用户选项
- 独占资源设置(排他性)
setExclusive(bool) # 统一设置按钮组中的按钮是否是独占(选择互斥) exclusive() # 获取按钮组是否独占
- 可用信号
buttonClicked(int/QAbstractButton) # 当按钮组中的按钮被点击时, 发射此信号。传递 按钮对象或者Id buttonPressed(int/QAbstractButton) # 当按钮组中的按钮被按下时, 发射此信号。传递 按钮对象或者Id buttonReleased(int/QAbstractButton) # 当按钮组中的按钮被释放时, 发射此信号。传递 按钮对象或者Id buttonToggled(QAbstractButton, bool) # 当按钮组中的按钮被切换状态时, 发射此信号。传递按钮对象和选中状态 # ①先监听切换前的按钮id,是否被选中(bool), # ②后监听切换后的按钮id,是否被选中(bool), # 触发信号,会向外传递 按钮对象或者Id,默认是传递 按钮对象 # 如果一个对象向外界提供的信号名称一样, 但参数不一样,外界在使用信号时, 可以使用如下格式进行选择 signal_name[type] # signal_name:信号名称 # type:参数类型 # # 默认方式,传递被点击的按钮对象 # group_sex.buttonClicked.connect(lambda b:print(b.text(), b)) # # 传递id方式 # group_option.buttonPressed[int].connect(lambda i: print(i, group_option.button(i))) # buttonToggled 信号不能传递id
- 示例代码
- 示例1:QButtonGroup创建和使用
from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.resize(500, 500) window.setWindowTitle('QButtonGroup-创建和使用') # 创建单选按钮 rbtn_male = QRadioButton("男", window) rbtn_female = QRadioButton("女", window) rbtn_yes = QRadioButton("Yes", window) rbtn_no = QRadioButton("No", window) # 单选按钮移动到指定位置 rbtn_male.move(100, 100) rbtn_female.move(200, 100) rbtn_yes.move(100, 150) rbtn_no.move(200, 150) # 创建抽象按钮组 group_sex = QButtonGroup(window) group_option = QButtonGroup(window) # 将单选按钮分别添加到抽象按钮组 group_sex.addButton(rbtn_male,1) group_sex.addButton(rbtn_female,2) group_option.addButton(rbtn_yes,1) group_option.addButton(rbtn_no) rbtn_female.setChecked(True) rbtn_yes.setChecked(True) # # 获取抽象按钮组中所有的按钮对象,返回列表 # ls = group_sex.buttons() # # for b in ls: # print(b.text()) # # # 根据ID获取抽象按钮组中的按钮对象 # print(group_option.button(2)) # # 获取按钮组中选中的按钮对象 # print(group_sex.checkedButton()) # # # 获取按钮组中选中的按钮ID # print(group_sex.checkedId()) # # # 移除抽象按钮组中指定按钮 # group_sex.removeButton(rbtn_male) # # print('抽象按钮组移除按钮之后') # for b in group_sex.buttons(): # print(b.text()) # 给抽象按钮组中的按钮添加id group_option.setId(rbtn_yes, 10) group_option.setId(rbtn_no, 11) # 获取按钮组中指定按钮的id print(group_option.id(rbtn_yes)) print(group_option.id(rbtn_no)) # 获取按钮组中被选中按钮的id print(group_option.checkedId()) window.show() sys.exit(app.exec_())
- 示例2:QButtonGroup可用信号
from PyQt5.Qt import * import sys app = QApplication(sys.argv) window = QWidget() window.resize(500, 500) window.setWindowTitle('QButtonGroup-可用信号') # 创建单选按钮 rbtn_male = QRadioButton("男", window) rbtn_female = QRadioButton("女", window) rbtn_yes = QRadioButton("Yes", window) rbtn_no = QRadioButton("No", window) # 单选按钮移动到指定位置 rbtn_male.move(100, 100) rbtn_female.move(200, 100) rbtn_yes.move(100, 150) rbtn_no.move(200, 150) # 创建抽象按钮组 group_sex = QButtonGroup(window) group_option = QButtonGroup(window) # 将单选按钮分别添加到抽象按钮组 group_sex.addButton(rbtn_male, 1) group_sex.addButton(rbtn_female, 2) rbtn_male.setChecked(True) group_option.addButton(rbtn_yes, 1) group_option.addButton(rbtn_no, 2) rbtn_yes.setChecked(True) # 可用信号 # buttonClicked(int / QAbstractButton) # 当按钮组中的按钮被点击时, 发射此信号 # buttonPressed(int / QAbstractButton) # 当按钮组中的按钮被按下时, 发射此信号 # buttonReleased(int / QAbstractButton) # 当按钮组中的按钮被释放时, 发射此信号 # buttonToggled(int / QAbstractButton, bool) # 当按钮组中的按钮被切换状态时, 发射此信号 # # 默认方式,传递被点击的按钮对象 # group_sex.buttonClicked.connect(lambda b:print(b.text(), b)) # # 传递id方式 # group_option.buttonPressed[int].connect(lambda i: print(i, group_option.button(i))) def cao(a, b): print(a, b) group_option.buttonToggled.connect(cao) # ----①buttonToggled先监听切换前的按钮id,是否被选中(bool) # ----②buttonToggled后监听切换后的按钮id,是否被选中(bool) window.show() sys.exit(app.exec_())