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))

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

转载于:https://www.cnblogs.com/yinsedeyinse/p/10745740.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值