• GUI学习之七——单选框QRadioButton和QButtonGroup的学习总结


    一.单选框QRadioButton的使用

    1.类的描述

    a.单选框按钮用于给用户提供若干选项中的单选操作,当一个被选中时,会自动取消选中的那个。(如果只有一个时可以通过单击该按钮改变其状态;而存在多个按钮时单击选中的按钮无法改变其状态)

    b.单选按钮左侧会有一个圆形的图标来表示按钮被选中

    c.QRadioButton继承了QAbstractButton类,具有父类所有的API。

    2.创建

    创建的方法和PushButton按钮的创建方式是一样的

    rb_1 = QRadioButton('Yes',window)
    rb_1.move(100,200)
    rb_2 = QRadioButton('No',window)
    rb_2.move(100,220)

    3.信号

    单选按钮除了继承的信号外,最长用的信号为状态切换的信号

    QRadioButton.toggled()

    一般在按钮状态切换时候会发送信号,并传送是否被选中的信号。

    rb_2.toggled.connect(lambda Checked:print(Checked)) #匿名函数接收了toggled传递的参数

    还有一点要注意的是这个toggled是状态改变,而不是按钮被点击,区别就是在点击了按钮1时按钮2的状态也会改变,信号也会被发送。

    4.多组互斥的问题

    我们在讲QAbstractButton类时讲过按钮的互斥这个问题:在一个父控件内按钮是可以互斥的,但是如果存在多组的互斥怎么办?我们可以建立多个父控件

    from PyQt5.Qt import *
    import sys
    app=QApplication(sys.argv)
    class MyWindow(QWidget):
        pass
    
    
    
    
    window = MyWindow()
    window.resize(800,600)
    
    label_1 = MyWindow(window)
    label_1.resize(800,300)
    # rb = QRadioButton(window_1)
    rb_1 = QRadioButton('Yes',label_1)
    rb_1.move(100,200)
    rb_2 = QRadioButton('No',label_1)
    rb_2.move(100,220)
    
    
    label_2 = QWidget(window)
    label_2.resize(800,200)
    label_2.move(0,300)
    rb_3 = QRadioButton('',label_2)
    rb_3.move(50,20)
    rb_4 = QRadioButton('',label_2)
    rb_4.move(50,60)
    
    window.show()
    sys.exit(app.exec_())
    两组单选按钮

    这样就可以使用多种互斥按钮了,可是每次添加这种控件比较麻烦,还要处理视觉上是否可见或遮挡其他控件的问题,那么就引出了下面的这个类——QButtonGroup

    二.QButtonGroup

    1.描述

    a.QButtonGroup提供了一个抽象的按钮容器,可以将按钮划分为一组。

    b.QButtonGroup是继承自QObject,不具备可视化的效果

    c.一般QButtonGroup定义的组存放的都是可以被Checked的按钮。

    2.建立按钮组,并将按钮存放在组内

    from PyQt5.Qt import *
    import sys
    app=QApplication(sys.argv)
    class MyWindow(QWidget):
        pass
    
    window = MyWindow()
    btn_1 = QRadioButton('male',window)
    btn_2 = QRadioButton('female',window)
    btn_1.move(100,50)
    btn_2.move(100,80)
    btn_3 = QRadioButton('yes',window)
    btn_4 = QRadioButton('no',window)
    btn_3.move(200,50)
    btn_4.move(200,80)
    
    group_sex = QButtonGroup()  #创建按钮组
    group_sex.addButton(btn_1)  #添加按钮
    group_sex.addButton(btn_2)
    创建按钮组

    3.按钮ID的分配、绑定和获取

    在向按钮组内添加按钮时是有个ID的,这个值默认为-1(上个案例上没写就是默认值)。这个-1不是说添加的按钮ID值为-1,而是该值为系统自动分配的,自动分配的值为负数。

    group.setId(btn,id=)  #设定ID
    group.id(btn)         #获取按钮ID,如果按钮不存在返回-1

    4.查看按钮

    group.buttons()         #获取组内所有按钮对象
    group.button()          #按ID获取按钮,如果ID不存在返回值为None
    group.checkedId()       #获取选中的按钮ID,无按钮被选中返回-1
    group.checkedButton()   #获取选中的按钮对象

    5.移除按钮

    group.removeButton()

    注意这个按钮的移除不是从视觉上删除按钮,而是断开和组内其他按钮成员的逻辑关系。

    6.互斥性设置

    我们在QAbstractButton内讲了按钮的互斥性的设置,那是对单个按钮设置,这里还可以对组里的按钮统一设置

    group.setExclusive(True)  #设置组内按钮互斥
    group.exclusive()         #获取组内按钮是否互斥

     7.信号使用

    group.buttonClicked()    #组内按钮被点击
    group.buttonPressed()    #组内按钮被按下
    group.buttonReleased()   #组内按下的按钮被释放
    group.buttonToggled()    #组内按钮状态切换

    这里要插播一个重要的知识点:如果一个对象想外界提供的信号名称一样,但参数不一样,可以用下面的格式选择信号参数

    singal_name[type]
    singal——信号名称
    type——信号类型

    例如group.buttonClicked()可以发送 两种信号参数——按钮对象或按钮ID可以用

    group.buttonClicked[int]

    来改变信号参数。

    group_sex.buttonClicked[int].connect(lambda data:print(data))
    group_sex.buttonClicked.connect(lambda data:print(data))

    看看打印出来的东西是不是不一样!

  • 相关阅读:
    转 Scott Mitchell的ASP.NET2.0数据指南中文版索引
    ASP.NET2.0中Gridview中数据操作技巧
    SQL语句导入导出大全
    SQL2000存储过程的基础教程
    如何取出Gridview选中行的数值
    asp.net2.0将EXCEL导入到MS Sql server2000
    C#泛型秘诀(5)
    C#泛型秘诀(4)
    C#泛型秘诀(1)
    C#泛型秘诀(2)
  • 原文地址:https://www.cnblogs.com/yinsedeyinse/p/10745740.html
Copyright © 2020-2023  润新知