034.PyQt5_QButtonGroup_抽象按钮组

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_())

你可能感兴趣的:(PyQt5,qt5,pyqt,python,qt,ui)