一.单选框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))

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

GUI学习之七——单选框QRadioButton和QButtonGroup的学习总结的更多相关文章

  1. CSS学习笔记三:自定义单选框,复选框,开关

    一点一点学习CCS,这次学习了如何自定义单选框,复选框以及开关. 一.单选框 1.先写好body里面的样式,先写几个框 <body> <div class="radio-1 ...

  2. 【MFC学习笔记-作业5-小数据库】【单选框,复选框,滚动条,列表框】

    界面已经实现完毕. 要完成的操作就是1.性别分组(2选1) 2.属性勾选 3.年龄通过滚动条调整 4.职称通过下方的列表框选择 5.输入姓名 6.存入左方的列表框 7.当选择左方列表框的人时,可以显示 ...

  3. Jquery学习笔记:操作form表单元素之二(复选框和单选框)

    在上面文章的基础上,我们介绍如何操作表单元素中的 复选框和单选框. 一.复选框 <label> <input type="checkbox" id="i ...

  4. MFC学习单选框Radio使用

    创建单选框Radio ,ID号IDC_RADIO_NAME 1.获取单选框内容 int RadioState = ((CButton *)GetDlgItem(IDC_RADIO_NAME))-> ...

  5. elementUI 学习入门之 radio 单选框

    Radio 单选框 基础用法 选项默认可见,选项不宜过多,选项过多建议使用 select 选择器 使用 Radio 组件,需要设置 v-model 绑定变量,选中意味着变量的值为相应 Radio  l ...

  6. Qt5学习笔记——QRadioButton与QbuttonGroup

    [我是小标题:使用QToolButton实现radio button功能.] QRadioButton是什么?  下图是Windows系统中典型的radio button显示效果.    QRadio ...

  7. Selenium2学习(十五)-- 单选框和复选框(radiobox、checkbox)

    本篇主要介绍单选框和复选框的操作 一.认识单选框和复选框 1.先认清楚单选框和复选框长什么样 2.各位小伙伴看清楚哦,上面的单选框是圆的:下图复选框是方的,这个是业界的标准,要是开发小伙伴把图标弄错了 ...

  8. Android学习使用基本界面组件(下拉框,单选框,复选框,数字转轮,滚动条)

    (一)建立单选框按钮 RadioGroup和RadioButton建立单选框按钮 字符串资源文件: <resources> <string name="app_name&q ...

  9. [CSS]复选框单选框与文字对齐问题的研究与解决.

    前言:今天碰到的这个问题, 恰好找到一个很好的博文, 在这里转载过来 学习下. 原文地址:复选框单选框与文字对齐问题的研究与解决. 目前中文网站上面的文字,就我的个人感觉而言,绝大多数网站的主流文字大 ...

随机推荐

  1. thingsboard改造使用mysql数据库

    thingsboard从2.2版本开始,兼容关系型数据库与非关系型数据库共用(关系型数据库保存实体类信息.非关系型数据库cassandra保存遥测数据信息).由于国内偏向使用mysql数据库,而非po ...

  2. 关联tomcat源代码

    1.进入tomcat官网下载对应版本源代码文件 2. 3..ctrl+鼠标左键 点击Cookie对象 4. 5.

  3. javascript基础知识笔记-自用

    笔记内容根据个人基础知识不足不明白之处做的记录.主要看的:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript 1.变量,变量的名字又叫标识符 ...

  4. css实现布局

    1.两栏布局 两栏布局一般就是一栏定宽一栏自适应(也就是流动).分的细的话还有左栏定宽右栏自适应.右栏定宽左栏自适应. 举个栗子:一栏定宽200px,一栏自适应. <head> <m ...

  5. 7Linux存储结构和磁盘划分

    FHS yum的.repo的配置文件多个的话,是依次生效吗? /boot 开机所需文件—内核.开机菜单以及所需配置文件等/dev 以文件形式存放任何设备与接口/etc 配置文件/home 用户主目录/ ...

  6. ASE存储过程和IQ存储过程的常见区别(附例子)

    ASE存储过程和IQ存储过程的常见区别(附例子) 1 存储过程简介 存储过程(Stored Procedure)是为了完成特定的功能而汇集成一组的SQL语句集,并为该组SQL语句命名.经编译后存储在S ...

  7. 阿里云从0安装mysql到远程连接

    1.安装mysql数据库. (1)下载mysql源安装包:wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rp ...

  8. Unity4.3.4 安装出现 pattern not found

    第一次破解不成功,第二次破解的时候就会出现这个错误 删除C:\ProgramData\Unity里面文件后,再重启后点击Manual Activation,出现的对话框是是保存当前序列号?重新加载序列 ...

  9. laravel passport加密jwt格式的access_token中的sub(user_id)字段

    在很多需求我们不希望别人知道用户在我们表中的 user_id :但是又想用数据库的自增 id 功能:一般时候在取出用户后加密 user_id 加密即可:但是总有那么几个不经意间就可能把我们的 user ...

  10. card布局解决复杂操作的布局问题

    一直不是很待见直接使用card布局,直到对于一些稍微复杂点的业务, 通过border布局和弹窗体的方式解决特别费劲之后,才想起了card布局, 发现card布局真是一个很好的解决办法. 那个使用起来很 ...