一.单选框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. 【机器学习_9】sklearn

    背景 机器学习的重头戏就在sklearn,里面包含各种机器学习算法.希望尽量通过便易上手的方式掌握这个库. 资料 官网--随时查 https://scikit-learn.org/stable/ sk ...

  2. C# winform三种方法判断文本框textBox内容是否为空

    使用系统API函数,需要使用命名空间:System.Runtime.InteropServices: 1.if (textBoxPath.Text ==  String.Empty ) 2.if (t ...

  3. 记录一次JQuery 动态参数使用

    之前动态id 使用时时候一直是复制黏贴的,到自己实际使用的时候却毫无印象,这样不可取呀 $('#id')  取的是 id=‘id’ 的元素 $('#'+id)  才是取id为动态值的时候正确写法 记录 ...

  4. frist Django app — 三、 View

    前面已经说过了Django中model的一些用法,包括orm,以及操作的api,接下来就是搭一些简单的界面学习view——Django中的view.主要介绍以下两个方面: url映射 请求处理 模板文 ...

  5. dojo里添加目录树

    其实循环生成目录树这个方法不仅仅局限于在使用dojo的情况下,只要明白了其中的原理,在任何一种语言下都能动态循环生成. 1. 数据结构 在这里先说明一下数据结构,我这里循环生成目录树的数据结构是像这样 ...

  6. Zabbix常见问题

    1.Q:  agent日志中出现“active check configuration update from [127.0.0.1:10051] started to fail (cannot co ...

  7. MTK6261之Catcher工具的Database Path

    在Catcher使用使用的时候我们常用要选择Database Path 设置数据库的路径,编译自动生成的文件: 设置路径选项: (一般是在对应工程文件的路径 \tst\database_classb) ...

  8. ModelSerializer Meta设置

    class AccountSerializer(serializers.ModelSerializer): class Meta: # 模型名称 model = User # 序列化返回的字段 fie ...

  9. linux 下oracle导入dmp文件

    2017年08月01日 19:10:49 xuxie13 阅读数:17788   最近要到某公司进行poc演示,整了个新项目,需要我数据库修改项目,这才有了这篇博客. 首先进入linux下oracle ...

  10. day 09

    内存管理 引用计数:垃圾回收机制的依据 当变量的值被引用的时,变量值的引用计数+1,当变量名被解除绑定时该值的引用计数减少一. 当引用计数变成0的时候会被垃圾回收机制回收. 引用计数会出现循环引用问题 ...