zoukankan      html  css  js  c++  java
  • 将单选按钮和多选按钮分组的类QButtonGroup

    QButtonGroup 的继承图:

    QButtonGroup 的描述:

    它是个抽象的按钮容器,可以将多个按钮划分为一组

    之所以抽象是指它不具备可视化的效果(因为它继承自QObject ,一般继承自QWidget的才具有可视化效果)。

    它一般放的是可被检查的按钮:例如单选按钮,多选按钮,

    QButtonGroup 的继承:

    它继承自QObjecct 类

    QButtonGroup 的功能:

    添加按钮:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    
    ###########################################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1)
    sex_group.addButton(radio_button_2)
    
    ###########################################################
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    
    ###########################################################
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    View Code

    id的用途

    添加按钮的时候设置id 是方便了后面对用户所做选择进行判断,进行分析处理。

    它的默认值是-1

    这里要注意,-1只是个标识,系统会为每个按钮自动分配id ,并不是所有的按钮的id 都是-1

    所谓自动分配是从-2开始,-2,-3,-4,,,,

    我们这里给男设置 1  女设置2  

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    #########################添加按钮的时候给它设置id##################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1,1)
    sex_group.addButton(radio_button_2,2)
    #########################添加按钮的时候给它设置id##################################
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    ###########################################################
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    View Code

    查看组中的按钮:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    ###########################################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1)
    sex_group.addButton(radio_button_2)
    ###########################################################
    
    
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    
    
    
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    ###########################################################
    
    #****************************查看组中的按钮*******************************
    print(sex_group.buttons())
    print(judge_group.buttons())
    
    #****************************查看组中的按钮*******************************
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    View Code

    如果添加按钮的时候给设置id 的话,那么,我们在查看按钮的时候可以根据id 来查看,

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    #########################添加按钮的时候给它设置id##################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1,1)
    sex_group.addButton(radio_button_2,2)
    #########################添加按钮的时候给它设置id##################################
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    ###########################################################
    
    #****************************查看id为 1 的按钮*******************************
    print(sex_group.button(1))
    
    #****************************查看id为 1 的按钮*******************************
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    在按钮组中,查看id 为1的按钮

    查看组中被选中的按钮:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    radio_button_1.setChecked(True)
    #########################添加按钮的时候给它设置id##################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1,1)
    sex_group.addButton(radio_button_2,2)
    #########################添加按钮的时候给它设置id##################################
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    ###########################################################
    
    #****************************查看组中被选中的按钮*******************************
    print(sex_group.checkedButton())
    
    #****************************查看组中被选中的按钮*******************************
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    View Code

    移除按钮:

    它并不是从window 上删除这个按钮,而只是将其移出抽象的按钮组。

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    radio_button_1.setChecked(True)
    #########################添加按钮的时候给它设置id##################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1,1)
    sex_group.addButton(radio_button_2,2)
    #########################添加按钮的时候给它设置id##################################
    
    
    #****************************移出按钮组*******************************
    sex_group.removeButton(radio_button_2)
    
    #****************************移出按钮组*******************************
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    ###########################################################
    
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    View Code

    绑定和获取ID:

    前面的添加按钮到按钮组的时候可以绑定id ,如果忘了传了,

    也可以用方法来设置。

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    radio_button_1.setChecked(True)
    #########################添加按钮的时候给它设置id##################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1)
    sex_group.addButton(radio_button_2)
    #########################添加按钮的时候给它设置id##################################
    
    
    #****************************绑定id *******************************
    sex_group.setId(radio_button_1,1)
    sex_group.setId(radio_button_2,2)
    
    #****************************绑定id *******************************
    
    
    #****************************获取id *******************************
    print(sex_group.id(radio_button_1))
    print(sex_group.id(radio_button_2))
    
    #****************************获取id *******************************
    
    
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    ###########################################################
    
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    绑定和获取组中按钮的id
    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    radio_button_1.setChecked(True)
    #########################添加按钮的时候给它设置id##################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1)
    sex_group.addButton(radio_button_2)
    #########################添加按钮的时候给它设置id##################################
    
    
    #****************************绑定id *******************************
    sex_group.setId(radio_button_1,1)
    sex_group.setId(radio_button_2,2)
    
    #****************************绑定id *******************************
    
    
    #****************************获取id *******************************
    print(sex_group.id(radio_button_1))
    print(sex_group.id(radio_button_2))
    
    #****************************获取id *******************************
    
    #****************************查看当前选中的按钮的id*******************************
    print(sex_group.checkedId())
    
    #****************************查看当前选中的按钮的id*******************************
    
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    ###########################################################
    
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    查看当前组中选中的按钮的id

    如果都没有选中的话,id 是-1

    独占设置:

    可以将组中的独占设置为否!

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    radio_button_1.setChecked(True)
    #########################添加按钮的时候给它设置id##################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1)
    sex_group.addButton(radio_button_2)
    #########################添加按钮的时候给它设置id##################################
    
    
    #****************************将一个组的独占设置为否定*******************************
    sex_group.setExclusive(False)
    #****************************将一个组的独占设置为否定*******************************
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    ###########################################################
    
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    View Code

    QButtonGroup 的信号:

    它会传递两种类型的值,一个是具体哪个按钮,一个是它的id 

    发出信号时向外传出的int 指的是之前设置的id  .

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    radio_button_1.setChecked(True)
    #########################添加按钮的时候给它设置id##################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1)
    sex_group.addButton(radio_button_2)
    #########################添加按钮的时候给它设置id##################################
    
    
    #****************************信号 向外传出的是具体的按钮*******************************
    sex_group.buttonClicked.connect(lambda val:print(val))
    #****************************信号 向外传出的是具体的按钮*******************************
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    ###########################################################
    
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    传出的是按钮

    对于这种信号名字相同,参数类型不同,我们可以用以下方式进行信号选择:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    radio_button_1.setChecked(True)
    #########################添加按钮的时候给它设置id##################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1)
    sex_group.addButton(radio_button_2)
    #########################添加按钮的时候给它设置id##################################
    
    
    #****************************信号 向外传出的是按钮的id *******************************
    sex_group.buttonClicked[int].connect(lambda val:print(val))
    #****************************信号 向外传出的是按钮的id ******************************
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    ###########################################################
    
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    传出的是按钮的id

    当然,获取了具体的按钮之后,自然很简单就可以获得它的id 了。

    直接用sex_group.id() 就可以:

    from PyQt5.Qt import * #刚开始学习可以这样一下导入
    import sys
    #1,创建app
    app  = QApplication(sys.argv)
    
    
    #2,控件的操作:
    #创建控件
    window = QWidget()
    
    
    #设置控件
    window.setWindowTitle("QRadioButton")
    window.resize(500,500)
    
    
    radio_button_1 = QRadioButton("男-Male",window)
    radio_button_1.move(100,100)
    radio_button_1.setIcon(QIcon("icon.ico"))
    radio_button_1.setShortcut("Ctrl+M")
    
    
    radio_button_2 = QRadioButton("女-Famale",window)
    radio_button_2.move(100,200)
    radio_button_2.setIcon(QIcon("icon.ico"))
    radio_button_2.setShortcut("Ctrl+F")
    radio_button_1.setChecked(True)
    #########################添加按钮的时候给它设置id##################################
    sex_group = QButtonGroup(window)
    sex_group.addButton(radio_button_1)
    sex_group.addButton(radio_button_2)
    #########################添加按钮的时候给它设置id##################################
    
    
    #****************************信号 向外传出的是按钮的id *******************************
    sex_group.buttonClicked.connect(lambda val:print(val,sex_group.id(val)))
    #****************************信号 向外传出的是按钮的id ******************************
    
    
    radio_button_yes = QRadioButton("yes",window)
    radio_button_yes.move(300,100)
    
    radio_button_no = QRadioButton("yes",window)
    radio_button_no.move(300,200)
    
    ###########################################################
    judge_group = QButtonGroup(window)
    judge_group.addButton(radio_button_yes)
    judge_group.addButton(radio_button_no)
    ###########################################################
    
    
    
    #展示控件
    window.show()
    
    #3,进入消息循环
    sys.exit(app.exec_())
    既获得按钮,又获得id ,(获得按钮其实就可以获得id )

    总结:

    以上就是按钮组的介绍,它一般都是配合QRadioButton 和 QCheckBox 使用的!

  • 相关阅读:
    请朋友做事,须以名誉为限,为朋友做事,亦须以名誉为限
    这世上总有一些人记得你,关注着你,牵挂着你
    杏花春雨已不再,牧童遥指已不再,剑门细雨渭城轻尘也都已不再
    如果要你做鲁滨逊,你会选第三型还是第二型的朋友做“礼拜五”呢
    人类最不能伤害的就是自尊
    单靠理论和教训是无济于事的
    交真朋友已是件比较奢侈的事儿
    他一定是一个懂生活、懂人生,爱自己、爱别人的人
    国子监,就是从前的大学
    只有把理想和现实有机结合起来,才有可能成为一个成功之人
  • 原文地址:https://www.cnblogs.com/zach0812/p/11372320.html
Copyright © 2011-2022 走看看