PyQt5 复选框

复选框

一般来说复选框通常用于表示可以启用或禁用的应用程序中的功能。
QCheckBox继承自QAbstractButton,它提供了一个带文本标签的复选框。
QCheckBox(复选框)和QRadioButton(单选框)都是选项按钮。这是因为它们都可以在开(选中)或者关(未选中)之间切换。区别是对用户选择的限制:单选框定义了“多选一”的选择,而复选框提供的是“多选多”的选择。
只要复选框被选中或者清除,都会发射一个stateChanged()信号。如果想在复选框状态改变的时候触发一个行为,请连接这个信号,可以使用 isChecked()来查询复选框是否被选中。
除了常用的选中和未选中两个状态,QCheckBox还可选地提供了第三种状态(半选)。如果需要第三种状态,可以通过setTristate()来使它生效,并使用checkState()来查询当前的切换状态。

栗子

"""
在这个例子中我们实现了如下功能:
选中复选框,点击提交,其对应的复选框内容将通过QMessageBox弹出
具备全选的功能
全选的复选框能够实时呈现(全选、半选、未选)下面复选框的选择情况
"""
from PyQt5.QtWidgets import QWidget, QCheckBox, QApplication, QPushButton,QMessageBox
from PyQt5.QtCore import Qt
import sys

class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        #新建4个复选框对象
        self.cb1 = QCheckBox('全选',self)
        self.cb2 = QCheckBox('你是',self)
        self.cb3 = QCheckBox('我的',self)
        self.cb4 = QCheckBox('宝贝',self)

        bt = QPushButton('提交',self) 

        self.resize(300,200)
        self.setWindowTitle('早点毕业吧--复选框')

        self.cb1.move(20,20)
        self.cb2.move(30,50)
        self.cb3.move(30,80)
        self.cb4.move(30,110)

        bt.move(20,160)
"""
每当复选框的状态改变时,即每当用户选中或取消选中该信号时,就会发出此信号。所以当产生此信号的时候,我们将其连接相应的槽函数。其中全选(cb1)那个复选框对应的是changecb1,其它的是changecb2。
"""
        self.cb1.stateChanged.connect(self.changecb1)
        self.cb2.stateChanged.connect(self.changecb2)
        self.cb3.stateChanged.connect(self.changecb2)
        self.cb4.stateChanged.connect(self.changecb2)
        bt.clicked.connect(self.go)

        self.show()
   """
   当按钮被点击之后,根据复选框被选中的类型及数量,我们弹出了不同的信息。
   """
    def go(self):
        if self.cb2.isChecked() and self.cb3.isChecked() and self.cb4.isChecked():
            QMessageBox.information(self,'I Love U','你是我的宝贝!')
        elif self.cb2.isChecked() and self.cb3.isChecked():
            QMessageBox.information(self,'I Love U','你是我的!')
        elif self.cb2.isChecked() and self.cb4.isChecked():
            QMessageBox.information(self,'I Love U','你是宝贝!')
        elif self.cb3.isChecked() and self.cb4.isChecked():
            QMessageBox.information(self,'I Love U','我的宝贝!')
        elif self.cb2.isChecked():
            QMessageBox.information(self,'I Love U','你是!')
        elif self.cb3.isChecked():
            QMessageBox.information(self,'I Love U','我的!')
        elif self.cb4.isChecked():
            QMessageBox.information(self,'I Love U','宝贝!') 
        else:
            QMessageBox.information(self,'I Love U','貌似你没有勾选啊!')

    def changecb1(self):
        if self.cb1.checkState() == Qt.Checked:
            self.cb2.setChecked(True)
            self.cb3.setChecked(True)
            self.cb4.setChecked(True)
        elif self.cb1.checkState() == Qt.Unchecked:
            self.cb2.setChecked(False)
            self.cb3.setChecked(False)
            self.cb4.setChecked(False)
            """
isChecked()主要是判断复选框是否被选中,要是选中就返回True,否则返回False。
            """     
    def changecb2(self):
        if self.cb2.isChecked() and self.cb3.isChecked() and self.cb4.isChecked():
            self.cb1.setCheckState(Qt.Checked)
        elif self.cb2.isChecked() or self.cb3.isChecked() or self.cb4.isChecked():
            self.cb1.setTristate()
            self.cb1.setCheckState(Qt.PartiallyChecked)
        else:
            self.cb1.setTristate(False)
            self.cb1.setCheckState(Qt.Unchecked)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

里setCheckState(),用以设置QCheckBox的状态:选中、半选、未选中。具体的值是这样的:
PyQt5 复选框_第1张图片

具体运行结果参考:
https://zhuanlan.zhihu.com/p/30509947
谢谢 “学点编程吧”

你可能感兴趣的:(PyQt5,PyQt5)