Pyside6 按钮控件---单选按钮QRadioButton、复选按钮QCheckBox和按钮组QButtonGroup

一、单选按钮QRadioButton

1.QRadioButton介绍(官翻)

QRadioButton是一个选项按钮,可以打开(选中)或关闭(未选中)。单选按钮通常为用户提供“多选一”选项。在一组单选按钮中,一次只能选中一个单选按钮;如果用户选择了另一个按钮,则关闭先前选择的按钮。

单选按钮在默认情况下是自动排他的。如果启用了auto-exclusive,属于同一个父部件的单选按钮的行为就像属于同一个exclusive按钮组一样。如果您需要属于同一个父部件的单选按钮的多个独占按钮组,请将它们放入一个QButtonGroup。

每当按钮被打开或关闭时,它都会发出toggled()信号。如果你想在每次按钮改变状态时触发一个动作,就连接到这个信号。使用isChecked()检查某个按钮是否被选中。

就像QPushButton一样,单选按钮显示文本和可选的小图标。使用setIcon()设置图标。文本可以在构造函数中设置,也可以使用setText()。快捷键可以通过在首选字符前面加上&符号来指定。例如:

button = QRadioButton("Search from the cursor", self)

在本例中,快捷键为Alt+c。详细信息请参阅QShortcut文档。要显示实际的&符号,请使用` && `。

重要的继承方法:text()、setText()、 setDown()、isDown()、autoRepeat()、group()、setAutoRepeat()、toggle()、pressed()、release()、clicked()和toggled()。

2.QRadioButton的常用方法

API函数

参数说明

返回值

功能作用

QRadioButton(self, parent)

parent:QWidget

None

创建一个单选按钮

QRadioButton(self, text,parent)

parent:QWidget

None

创建一个单选按钮

QRadioButton继承自QAbstractButton,他没有自己特有的方法,都是继承自QAbstractButton,相关方法参看QAbstractButton。

这里先解释什么是排他性(独占),简单点说就是,选我就不能选他,选他就不能选我。好比你你去ktv,来一排妹子。默认情况下,QRadioButton(妹子)是自动排他的,即setAutoExclusive(True),你只能选一个。你选任何一个,剩下的就都出去了。但是,如果你说:“我都要”。那你就要将他们每一个人setAutoExclusive(Flase)。

常用的场景就是个人信息的填写:

20241004-150546

对于QRadioButton,setDown(True)和setChecked(True)都是选中,QPushButton的setDown(True)是按下,setChecked(True)无效,而QCheckBox是相反的。

另一种情况,如下图所示:

如图,QRadioButton默认都是排他的,所以,默认情况下我们只能选一个,选了性别,就不能选职业。那么我们将他们都取消排他,也是不合理的,不可能既能选男又能选女。也不能将其中两个取消排他,取消排他的点了就会一直被选中,需要手动取消,这个效果大家可以自己试一试。

上面这种情况也是常见的,那么我们就需要借助按钮组QButtonGroup来实现功能,具体见QButtonGroup。

3.QRadioButton的常用信号

没有自有信号,全部继承自QAbstracButton。

二、复选按钮QCheckBox

1.QCheckBox介绍(官翻)

QCheckBox也是一个选项按钮,可以打开(选中)或关闭(未选中)。复选框通常用于表示应用程序中的功能,这些功能可以在不影响其他人的情况下启用或禁用。可以实现不同类型的行为。例如,可以使用QButtonGroup对复选按钮进行逻辑分组,允许互斥复选框。但是,QButtonGroup不提供任何视觉表示。

下图进一步说明了独占和非独占复选框之间的区别。

每当复选框被选中或清除时,它都会触发信号checkStateChanged()。如果你想在每次复选框改变状态时触发一个动作,就连接到这个信号。可以使用isChecked()来查询复选框是否选中。

除了通常的选中和未选中状态之外,QCheckBox还提供了第三种状态来表示“没有变化”。当你需要让用户选择不选中或不选中复选框时,这很有用。如果你需要第三种状态,可以使用setTristate()启用它,然后使用checkState()查询当前开关状态。

就像QPushButton一样,复选框显示文本和可选的小图标。使用setIcon()设置图标。文本可以在构造函数中设置,也可以使用setText()。快捷键可以通过在首选字符前加上&号来指定。例如:

checkbox = QCheckBox("Case sensitive", self)

在本例中,快捷键为Alt+A。详细信息请参阅QShortcut文档。要显示实际的&符号,请使用` && `。

重要的继承函数:text()、setText()、text()、pixmap()、setPixmap()、accel()、setAccel()、isToggleButton()、setDown()、isDown()、isOn()、checkState()、autoRepeat()、isExclusiveToggle()、group()、setAutoRepeat()、toggle()、pressed()、release()、clicked()、toggled()、checkState()和checkStateChanged()。

2.QCheckBox的常用方法

API函数

参数说明

返回值

功能作用

QCheckBox(self, parent)

parent:QWidget

None

创建一个复选框按钮

QCheckBox(self,text, parent)

text:str

parent:QWidget

None

创建一个复选框按钮

setTristate(self, y=True)

y:bool

None

设置是否开启中间状态

isTristate(self)

None

y:bool

获取是否开启中间状态

setCheckState(self, state)

state: PySide6.QtCore.Qt.CheckState

None

设置按钮的选中状态

checkState(self)

None

Qt.CheckState

获取按钮的选中状态

继承自QAbstractButton的方法不再列出,上面罗列是QCheckBox的自有方法。QCheckBox可以裂解为一个多选框,当多个QCheckBox按钮放在同一个父控件之下时,默认是非排他的,就说是,你要一个,要多个,也可以全要。当然,如果将每个QCheckBox按钮都设置为排他,那就只能选一个了。

QCheckBox按钮与QRadioButton除了外观上的区别,还能一个重要的性质:“三态”。

QRadioButton的状态:选中、未选中二者切换

QCheckBox的状态:选中、未选中二者切换(setTristate(Flase)关闭中间状态)

                                  选中、未改变、未选中三者切换(setTristate(True)开启中间状态)

QRadioButton除了鼠标点击改变状态,还可以使用setDown()和setChecked()以函数方式改变状态。

QCheckBox除了鼠标点击改变状态,在setTristate(Flase)是,使用setChecked()以函数方式改变状态;在setTristate(True)是,需要使用setCheckState( )来改变状态(这个可以设置中间态),setChecked()只能设置选中和非选中两种状态。

setCheckState( )参数是一个枚举类:

枚举类

枚举常量

枚举值

功能描述

Qt.CheckState

Unchecked

按钮未被选中

PartiallyChecked

按钮处于中间状态

Checked

按钮处于选中状态

什么是中间态,看下面的视频,我们将篮球这个复选框设置为三态,而其他都为二态:

20241004-155756

3.QCheckBox的常用信号

信号

参数说明

返回值

功能作用

stateChanged(arg__1)

arg_1:int

按钮的选中状态发生改变时发送信号

传递的参数0代表未选中,1代表中间状态,2代表选中状态

三、按钮组QButtonGroup

1.QButtonGroup介绍(官翻)

QButtonGroup提供了一个可以放置按钮小部件的抽象容器。它不提供该容器的可视化表示(就是说即使创建了对象实例,也不会被绘制出来),其作用主要是管理组中每个按钮的状态。它与QGroupBox的区别在于,QButtonGroup实例看不见,QGroupBox实例是可见的。而且,QButtonGroup只容纳按钮,QGroupBox能容纳所有控件(QGroupBox控件在后面章节介绍)。

一个设置了exclusive(独占)属性的按钮组将关闭除已被点击的按钮之外的所有拥有checkable (toggle)功能的按钮。按钮组默认情况下是独占的,即exclusive(True)。按钮组中的按钮通常是拥有选中功能的的QPushButton、QCheckBox(通常用于非独占按钮组)或QRadioButton。如果您创建了独占按钮组,则应确保按钮组的初始状态选中了一个按钮;否则,该组的初始是未选中任何按钮的状态。

按钮可以使用addButton()添加到组中,也可以使用removeButton()移除。如果组是独占的,则当前选中的按钮可与checkedButton()一起使用。如果单击某个按钮,则会发出buttonClicked()信号,这对于独占组中的可选中按钮,意味着该按钮已被选中。组中按钮的列表由buttons()返回。

此外,QButtonGroup可以通过setId()方法为按钮建立一个整数的映射。setId()为按钮分配一个整数id,并使用id()检索它。checkedId()提供了当前选中按钮的id,并且有一个信号idClicked()可以发出按钮的id。如果id()的返回值为-1,意思是“这个按钮不存在”。

2.QButtonGroup的常用方法

API函数

参数说明

返回值

功能作用

QButtonGroup(parent=None)

parent:QObject

None

创建一个按钮组对象

addButton(self, arg__1, id=-1)

arg__1:

QAbstractButton,

id: int = -1

None

向组中添加一个按钮

button(self, id)

id: int

QAbstractButton

通过id获取组中按钮

buttons(self)

None

List[QAbstractButton]

获取组中所有按钮,返回值是一个按钮对象列表

checkedButton(self)

None

QAbstractButton

获取组中被选中的按钮

checkedId(self)

None

int

获取组中被选中按钮的id

setExclusive(self, arg__1)

arg__1: bool

None

设置组的独占属性

exclusive(self)

None

bool

获取组的独占属性

setId(self, button, id)

button:

QAbstractButton,

id: int

None

设置组中按钮的id

id(self, button)

button:

QAbstractButton

int

获取组中按钮的id

removeButton(self, arg__1)

arg__1: QAbstractButton

None

移除组中指定按钮

有了按钮组,对于互斥按钮的管理就非常方便,比如我们要将QCheckBox都设置为独占,那么我们只要将它全部加入按钮组中,设置按钮组为独占按钮组就可以了,不用对按钮一个个的设置。

方法也很简单,不再过多解释。

3.QButtonGroup的常用信号

信号

参数说明

返回值

功能作用

buttonClicked(arg__1)

arg__1: PySide6.QtWidgets.QAbstractButton

按钮被点击是发出信号,并发送按钮对象

buttonPressed(arg__1)

arg__1: PySide6.QtWidgets.QAbstractButton

按钮被按下是发出信号,并发送按钮对象

buttonReleased(arg__1)

arg__1: PySide6.QtWidgets.QAbstractButton

按钮被释放是发出信号,并发送按钮对象

buttonToggled(arg__1, arg__2)

arg__1: PySide6.QtWidgets.QAbstractButton

arg__2:bool

按钮状态切换时返送信号,并发送按钮对象和选中状态

idClicked(arg__1)

arg__1:int

按钮被点击是发出信号,并发送按钮id

idPressed(arg__1)

arg__1:int

按钮被按下是发出信号,并发送按钮id

idReleased(arg__1)

arg__1:int

按钮被释放是发出信号,并发送按钮id

idToggled(arg__1, arg__2)

arg__1:int,

arg__2:bool

按钮状态切换时返送信号,并发送按钮id和选中状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值