一.单选框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. element-ui:el-table时间格式化

    如果想对表格某一列的内容格式化,可用 formatter 属性.属性绑定格式化的方法即可 <el-table-column prop="update_time" label= ...

  2. python之路:数据类型初识

    python开发之路:数据类型初识 数据类型非常重要.不过我这么说吧,他不重要我还讲个屁? 好,既然有人对数据类型不了解,我就讲一讲吧.反正这东西不需要什么python代码. 数据类型我讲的很死板.. ...

  3. Redis 哨兵节点之间相互自动发现机制(自动重写哨兵节点的配置文件)

    Redis的哨兵机制中,如果是多哨兵模式,哨兵节点之间也是可以相互感知的,各种搜索之后出来的是千篇一律的一个基础配置文件,在配置当前哨兵节点的配置文件中,并没有配置其他哨兵节点的任何信息.如下是一个哨 ...

  4. 1、let const

    1.作用域的概念 es6之前 es5 分为 全局作用域 函数作用域 es6 新增块级作用域 2.let const 与 var 区别 用var 可以无报错 此代码报错 引出 块级作用域 用 {} 包起 ...

  5. Android 添加第三方jar包

    1,拷贝jar包到项目的\app\libs文件夹下. 2,打开项目下的build.gradle(Module:app)文件,在“dependencies {}”中添加“compile files('l ...

  6. 《CSAPP》读书笔记

    第一章 第二章 第三章 第四章 第五章 第六章 第七章 链接 可重定位目标文件 符号和符号表 符号解析 第八章 第九章 虚拟存储器 虚拟存储器 页表.页命中.缺页 地址翻译 第十章 第十一章 第十二章 ...

  7. HBase 数据迁移方案介绍

    一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分为以下几类: 图1.HBase数据迁移方案 从上面图中可看出,目前的方案主要有四类,Hadoop层有一类,HBase层有三类.下 ...

  8. hbase基础建表语句

    在Hadoop目录下的HBASE下执行命令 ./hbase shell 进入hbase环境 创建hbase 数据库表 create "表名", "字段A",&q ...

  9. leetcode 最大不重复字符

    class Solution: def lengthOfLongestSubstring(self, s: str) -> int: if len(s) <= 1: return len( ...

  10. 【redis 学习系列】API的理解与使用(二)

    3.哈希 几乎所有的语言都支持了哈希(hash)类型.在Redis中,哈希类型是指键值本身又是一个键值对结构,形如:value = {{field, value} ... {field, value} ...