在 PyQt 中,QCheckBox 是一个常用的控件,它用来表示一个可选的状态。
setChecked 和 setCheckState 是 QCheckBox 的两个方法,它们都用于设置 QCheckBox 的状态,但是有一些区别。
1、setChecked 方法
setChecked 方法用于设置 QCheckBox 的状态为选中(True)或未选中(False)。例如:
checkbox.setChecked(True) # 设置为选中状态
checkbox.setChecked(False) # 设置为未选中状态
2、setCheckState方法
setCheckState 方法用于设置 QCheckBox 的状态为选中(Qt.Checked)、半选中( Qt.PartiallyChecked)或未选中(Qt.Unchecked)。例如:
checkbox.setCheckState(Qt.PartiallyChecked) # 设置为半选中状态
checkbox.setCheckState(Qt.Checked) # 设置为选中状态
checkbox.setCheckState(Qt.Unchecked) # 设置为未选中状态
注:
在调用setCheckState方法前需要启用三态模式,即:
checkbox.setTristate(True) # 启用三态模式
QCheckBox启用三态模式的样例:
from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox, QVBoxLayout
import sys
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
vbox = QVBoxLayout()
self.setLayout(vbox)
# 创建一个复选框对象并启用三态模式
cb = QCheckBox('Partially Checked')
cb.setTristate(True)
vbox.addWidget(cb)
self.setGeometry(300, 300, 350, 250)
self.setWindowTitle('Partially Checked Checkbox')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
3、三态模式应用场景
图形来源:c++ - QCheckbox: more states than checked and unchecked - Stack Overflow
类似这种树形结构的复选框,父复选框就存在部分选中,即子类有没全部被选中时(例如:上图include下面的子复选框被全选,全不选,部分被选)