一、单选按钮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和选中状态 |