QButtonGroup使用介绍

一、简介

QButtonGroup是PyQt5库中的一个组件,主要用于组织和管理一组按钮。通过QButtonGroup,可以方便地实现单选框或多选框功能,统一处理按钮的信号,并且可以为按钮分组设定ID以进行识别。

1、原始工程


from PyQt5.Qt import *
import sys

app = QApplication(sys.argv)

window = QWidget()
window.setWindowTitle("按钮组的使用")
window.resize(500, 500)


# 创建四个单选按钮
rb_male = QRadioButton("男", window)
rb_female = QRadioButton("女", window)
rb_male.move(100, 100)
rb_female.move(100, 150)

rb_big = QRadioButton("大", window)
rb_small = QRadioButton("小", window)
rb_big.move(300, 100)
rb_small.move(300, 150)




window.show()
sys.exit(app.exec_())


测试可发现,四个按钮都互斥,不符合使用逻辑。

2、解决方案

  1. 添加共同的父控件,此时同一个父控件内的QRadioButton互斥,但此种方式比较局限,且父控件是实体控件,不推荐。
  2. QButtonGroup方式,提供 一个抽象的按钮容器, 可以将多个按钮划分为一组,不具备可视化的效果,一般放的都是可以被检查的按钮,推荐使用。

二、功能介绍

1、创建和添加按钮

  1. api
api功能
addButton(QAbstractButton, id = -1)向按钮组中添加按钮
注:
  • 如果id为-1,则将为该按钮分配一个id。自动分配的ID保证为负数,从-2开始。
  • 如果要分配自己的ID,请使用正值以避免冲突
  1. 应用场景

    向按钮组中添加按钮, 并选择性设置ID。

  2. 代码

    from PyQt5.Qt import *
    import sys
    
    app = QApplication(sys.argv)
    
    window = QWidget()
    window.setWindowTitle("按钮组的使用")
    window.resize(500, 500)
    
    #*******QButtonGroup创建和添加按钮 *******开始
    # 创建四个单选按钮
    rb_male = QRadioButton("男", window)
    rb_female = QRadioButton("女", window)
    rb_male.move(100, 100)
    rb_female.move(100, 150)
    
    rb_big = QRadioButton("大", window)
    rb_small = QRadioButton("小", window)
    rb_big.move(300, 100)
    rb_small.move(300, 150)
    
    # 创建QButtonGroup
    sex_group = QButtonGroup(window)
    sex_group.addButton(rb_male, 1)
    sex_group.addButton(rb_female, 2)
    
    size_group = QButtonGroup(window)
    size_group.addButton(rb_big, 1)
    size_group.addButton(rb_small, 2)
    
    
    #*******QButtonGroup创建和添加按钮 *******结束
    
    window.show()
    sys.exit(app.exec_())
    
  3. 测试结果

    在这里插入图片描述

2、查看按钮

  1. api

    api功能
    buttons()查看所有按钮组中的按钮
    button(ID)根据ID获取对应按钮, 没有则返回None
    checkedButton()获取选中的那个按钮
  2. 应用场景

    获取指定条件的按钮

  3. 修改代码

    
    from PyQt5.Qt import *
    import sys
    
    app = QApplication(sys.argv)
    
    window = QWidget()
    window.setWindowTitle("按钮组的使用")
    window.resize(500, 500)
    
    #*******QButtonGroup创建和添加按钮 *******开始
    # 创建四个单选按钮
    rb_male = QRadioButton("男", window)
    rb_female = QRadioButton("女", window)
    rb_male.move(100, 100)
    rb_female.move(100, 150)
    rb_female.setChecked(True)
    
    rb_big = QRadioButton("大", window)
    rb_small = QRadioButton("小", window)
    rb_big.move(300, 100)
    rb_small.move(300, 150)
    
    # 创建QButtonGroup
    sex_group = QButtonGroup(window)
    sex_group.addButton(rb_male, 1)
    sex_group.addButton(rb_female, 2)
    
    size_group = QButtonGroup(window)
    size_group.addButton(rb_big, 1)
    size_group.addButton(rb_small, 2)
    
    
    #*******QButtonGroup创建和添加按钮 *******结束
    
    #*******查看按钮*******开始
    
    print("查看 sex_group 中所有按钮:\n{}".format(sex_group.buttons()))
    print("查看 sex_group 中id为2的按钮:\n{}".format(sex_group.button(2)))
    print("查看 sex_group 中选中的按钮:\n{}".format(sex_group.checkedButton()))
    
    #*******查看按钮*******结束
    
    window.show()
    sys.exit(app.exec_())
    
    
    
  4. 测试结果

    在这里插入图片描述

3、移除按钮

  1. api

    api功能
    removeButton(QAbstractButton)移除指定按钮
  2. 应用场景

    移除指定按钮,只是从抽象关系上移除按钮。

  3. 修改代码

    
    from PyQt5.Qt import *
    import sys
    
    app = QApplication(sys.argv)
    
    window = QWidget()
    window.setWindowTitle("按钮组的使用")
    window.resize(500, 500)
    
    #*******QButtonGroup创建和添加按钮 *******开始
    # 创建四个单选按钮
    rb_male = QRadioButton("男", window)
    rb_female = QRadioButton("女", window)
    rb_male.move(100, 100)
    rb_female.move(100, 150)
    rb_female.setChecked(True)
    
    rb_big = QRadioButton("大", window)
    rb_small = QRadioButton("小", window)
    rb_big.move(300, 100)
    rb_small.move(300, 150)
    
    # 创建QButtonGroup
    sex_group = QButtonGroup(window)
    sex_group.addButton(rb_male, 1)
    sex_group.addButton(rb_female, 2)
    
    size_group = QButtonGroup(window)
    size_group.addButton(rb_big, 1)
    size_group.addButton(rb_small, 2)
    
    
    #*******QButtonGroup创建和添加按钮 *******结束
    
    #*******查看按钮*******开始
    
    # print("查看 sex_group 中所有按钮:\n{}".format(sex_group.buttons()))
    # print("查看 sex_group 中id为2的按钮:\n{}".format(sex_group.button(2)))
    # print("查看 sex_group 中选中的按钮:\n{}".format(sex_group.checkedButton()))
    
    #*******查看按钮*******结束
    
    #*******移除按钮*******开始
    sex_group.removeButton(rb_male)
    print("查看 sex_group 中所有按钮:\n{}".format(sex_group.buttons()))
    
    #*******移除按钮*******结束
    
    window.show()
    sys.exit(app.exec_())
    
    
    
  4. 测试结果

    在这里插入图片描述

    打印发现只有一个按钮了。

4、QButtonGroup-ID操作

  1. api

    api功能
    setId(QAbstractButton,int)设置按钮id
    id(QAbstractButton)返回按钮对应的ID,如果不存在此按钮,则返回-1
    checkedId()选中按钮的ID,如果没有选中的按钮则返回-1
  2. 应用场景

    设置ID, 方便识别用户选项

  3. 修改代码,取消 size_group 添加button时设置的id,使用上述api操作

    
    from PyQt5.Qt import *
    import sys
    
    app = QApplication(sys.argv)
    
    window = QWidget()
    window.setWindowTitle("按钮组的使用")
    window.resize(500, 500)
    
    #*******QButtonGroup创建和添加按钮 *******开始
    # 创建四个单选按钮
    rb_male = QRadioButton("男", window)
    rb_female = QRadioButton("女", window)
    rb_male.move(100, 100)
    rb_female.move(100, 150)
    rb_female.setChecked(True)
    
    rb_big = QRadioButton("大", window)
    rb_small = QRadioButton("小", window)
    rb_big.move(300, 100)
    rb_small.move(300, 150)
    
    # 创建QButtonGroup
    sex_group = QButtonGroup(window)
    sex_group.addButton(rb_male, 1)
    sex_group.addButton(rb_female, 2)
    
    size_group = QButtonGroup(window)
    size_group.addButton(rb_big)
    size_group.addButton(rb_small)
    
    
    #*******QButtonGroup创建和添加按钮 *******结束
    
    #*******查看按钮*******开始
    
    # print("查看 sex_group 中所有按钮:\n{}".format(sex_group.buttons()))
    # print("查看 sex_group 中id为2的按钮:\n{}".format(sex_group.button(2)))
    # print("查看 sex_group 中选中的按钮:\n{}".format(sex_group.checkedButton()))
    
    #*******查看按钮*******结束
    
    #*******移除按钮*******开始
    # sex_group.removeButton(rb_male)
    # print("查看 sex_group 中所有按钮:\n{}".format(sex_group.buttons()))
    
    #*******移除按钮*******结束
    
    #*******id操作*******开始
    size_group.setId(rb_big, 1)
    size_group.setId(rb_small, 2)
    
    # 打印按钮id
    print("rb_big按钮id:{}".format(size_group.id(rb_big)))
    
    # 打印被选中的按钮id
    print("打印被选中的按钮id:{}".format(size_group.checkedId()))
    
    #*******id操作*******结束
    
    window.show()
    sys.exit(app.exec_())
    
    
    
  4. 测试结果

    在这里插入图片描述

5、独占操作(也就是按钮是否互斥)

  1. api

    api功能
    setExclusive(bool)设置QButtonGroup中的按钮是否具有独占性(互斥选择)
    exclusive()返回当前QButtonGroup的独占状态
  2. 应用场景

    统一设置按钮组中的按钮是否是独占(选择互斥)

  3. 修改代码

    
    from PyQt5.Qt import *
    import sys
    
    app = QApplication(sys.argv)
    
    window = QWidget()
    window.setWindowTitle("按钮组的使用")
    window.resize(500, 500)
    
    #*******QButtonGroup创建和添加按钮 *******开始
    # 创建四个单选按钮
    rb_male = QRadioButton("男", window)
    rb_female = QRadioButton("女", window)
    rb_male.move(100, 100)
    rb_female.move(100, 150)
    rb_female.setChecked(True)
    
    rb_big = QRadioButton("大", window)
    rb_small = QRadioButton("小", window)
    rb_big.move(300, 100)
    rb_small.move(300, 150)
    
    # 创建QButtonGroup
    sex_group = QButtonGroup(window)
    sex_group.addButton(rb_male, 1)
    sex_group.addButton(rb_female, 2)
    
    size_group = QButtonGroup(window)
    size_group.addButton(rb_big)
    size_group.addButton(rb_small)
    
    
    #*******QButtonGroup创建和添加按钮 *******结束
    
    #*******查看按钮*******开始
    
    # print("查看 sex_group 中所有按钮:\n{}".format(sex_group.buttons()))
    # print("查看 sex_group 中id为2的按钮:\n{}".format(sex_group.button(2)))
    # print("查看 sex_group 中选中的按钮:\n{}".format(sex_group.checkedButton()))
    
    #*******查看按钮*******结束
    
    #*******移除按钮*******开始
    # sex_group.removeButton(rb_male)
    # print("查看 sex_group 中所有按钮:\n{}".format(sex_group.buttons()))
    
    #*******移除按钮*******结束
    
    #*******id操作*******开始
    # size_group.setId(rb_big, 1)
    # size_group.setId(rb_small, 2)
    
    # 打印按钮id
    # print("rb_big按钮id:{}".format(size_group.id(rb_big)))
    
    # 打印被选中的按钮id
    # print("打印被选中的按钮id:{}".format(size_group.checkedId()))
    
    #*******id操作*******结束
    
    #*******独占状态*******开始
    print("sex_group的独占性为:{}".format(sex_group.exclusive()))
    # 设置独占性 为 非独占
    sex_group.setExclusive(False)
    print("修改后,sex_group的独占性为:{}".format(sex_group.exclusive()))
    
    #*******独占状态*******结束
    
    window.show()
    sys.exit(app.exec_())
    
    
    
  4. 测试结果

    在这里插入图片描述


三、信号

  1. api

    api功能
    buttonClicked(int/QAbstractButton)当按钮组中的按钮被点击时, 发射此信号
    buttonPressed(int/QAbstractButton)当按钮组中的按钮被按下时, 发射此信号
    buttonReleased(int/QAbstractButton)当按钮组中的按钮被释放时, 发射此信号
    buttonToggled(QAbstractButton/int, bool)当按钮组中的按钮被切换状态时, 发射此信号
  2. 应用场景

    监听用户的按钮点击事件,执行相应的逻辑操作。

  3. 修改代码

    
    from PyQt5.Qt import *
    import sys
    
    app = QApplication(sys.argv)
    
    window = QWidget()
    window.setWindowTitle("按钮组的使用")
    window.resize(500, 500)
    
    #*******QButtonGroup创建和添加按钮 *******开始
    # 创建四个单选按钮
    rb_male = QRadioButton("男", window)
    rb_female = QRadioButton("女", window)
    rb_male.move(100, 100)
    rb_female.move(100, 150)
    rb_female.setChecked(True)
    
    rb_big = QRadioButton("大", window)
    rb_small = QRadioButton("小", window)
    rb_big.move(300, 100)
    rb_small.move(300, 150)
    
    # 创建QButtonGroup
    sex_group = QButtonGroup(window)
    sex_group.addButton(rb_male, 1)
    sex_group.addButton(rb_female, 2)
    
    size_group = QButtonGroup(window)
    size_group.addButton(rb_big)
    size_group.addButton(rb_small)
    
    
    #*******QButtonGroup创建和添加按钮 *******结束
    
    #*******查看按钮*******开始
    
    # print("查看 sex_group 中所有按钮:\n{}".format(sex_group.buttons()))
    # print("查看 sex_group 中id为2的按钮:\n{}".format(sex_group.button(2)))
    # print("查看 sex_group 中选中的按钮:\n{}".format(sex_group.checkedButton()))
    
    #*******查看按钮*******结束
    
    #*******移除按钮*******开始
    # sex_group.removeButton(rb_male)
    # print("查看 sex_group 中所有按钮:\n{}".format(sex_group.buttons()))
    
    #*******移除按钮*******结束
    
    #*******id操作*******开始
    # size_group.setId(rb_big, 1)
    # size_group.setId(rb_small, 2)
    
    # 打印按钮id
    # print("rb_big按钮id:{}".format(size_group.id(rb_big)))
    
    # 打印被选中的按钮id
    # print("打印被选中的按钮id:{}".format(size_group.checkedId()))
    
    #*******id操作*******结束
    
    #*******独占状态*******开始
    # print("sex_group的独占性为:{}".format(sex_group.exclusive()))
    # 设置独占性 为 非独占
    # sex_group.setExclusive(False)
    # print("修改后,sex_group的独占性为:{}".format(sex_group.exclusive()))
    
    #*******独占状态*******结束
    
    #*******信号*******开始
    def on_button_clicked(button):
        print(f"Button clicked: {button.text()}")
    
    sex_group.buttonClicked.connect(on_button_clicked)
    
    #*******信号*******结束
    
    window.show()
    sys.exit(app.exec_())
    
    
    
  4. 测试结果

    在这里插入图片描述

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QButtonGroup是一个Qt框架中的类,用于管理一组按钮。它可以用于实现多个按钮的单选功能,也可以与其他控件结合使用,例如QStackedWidget,实现类似选项卡的效果。\[1\] 使用QButtonGroup的主要步骤如下: 1. 创建QButtonGroup对象,并设置互斥模式(即只能选择一个按钮)。 2. 使用addButton()方法将按钮添加到按钮组中,并为每个按钮分配一个唯一的id。 3. 可以通过Qt Designer拖拽按钮到界面上,然后使用addButton()方法将按钮添加到按钮组中,也可以通过代码创建按钮并添加到按钮组中。 4. 如果需要获取选中的按钮的id,需要将这些按钮的checkable属性设置为true。 5. 可以通过buttonClicked()信号连接到槽函数,以便在按钮被点击时执行相应的操作。 6. 可以通过button()方法获取指定id的按钮,并设置其为选中状态。 更多关于QButtonGroup的详细用法可以参考Qt系列教程中的相关章节。\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [Qt 中QButtonGroup 的用法](https://blog.csdn.net/tax10240809163com/article/details/92708983)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [[Qt 教程之Widgets模块] —— QButtonGroup抽象容器](https://blog.csdn.net/maizousidemao/article/details/127643027)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值