PyQt5 - QCheckBox 小部件

  • 简述

    当文本标签前出现一个矩形框时QCheckBox对象被添加到父窗口。就像 QRadioButton 一样,它也是一个可选择的按钮。它的常见用途是在要求用户选择一个或多个可用选项的情况下。
    与单选按钮不同,复选框默认情况下不是互斥的。为了将选择限制为可用项目之一,必须将复选框添加到 QButtonGroup。
    下表列出了常用的 QCheckBox 类方法 -
    序号 方法和描述
    1
    setChecked()
    更改复选框按钮的状态
    2
    setText()
    设置与按钮关联的标签
    3
    text()
    检索按钮的标题
    4
    isChecked()
    检查按钮是否被选中
    5
    setTriState()
    不为复选框提供更改状态
    每次选中或清除复选框时,对象都会发出stateChanged()信号。
  • 例子

    在这里,两个 QCheckBox 对象被添加到水平布局中。它们的 stateChanged() 信号连接到 btnstate() 函数。信号的源对象使用 lambda 传递给函数。
    
    
    self.b1.stateChanged.connect(lambda:self.btnstate(self.b1))
    
    self.b2.toggled.connect(lambda:self.btnstate(self.b2))
    
    
    isChecked()函数用于检查按钮是否被选中。
    
    
    if b.text() == "Button1":
    
       if b.isChecked() == True:
    
          print b.text()+" is selected"
    
       else:
    
          print b.text()+" is deselected"
    
    
    完整的代码如下 -
    
    
    import sys
    
    from PyQt5.QtCore import *
    
    from PyQt5.QtGui import *
    
    from PyQt5.QtWidgets import *
    
    
    
    class checkdemo(QWidget):
    
       def __init__(self, parent = None):
    
          super(checkdemo, self).__init__(parent)
    
          
    
          layout = QHBoxLayout()
    
          self.b1 = QCheckBox("Button1")
    
          self.b1.setChecked(True)
    
          self.b1.stateChanged.connect(lambda:self.btnstate(self.b1))
    
          layout.addWidget(self.b1)
    
            
    
          self.b2 = QCheckBox("Button2")
    
          self.b2.toggled.connect(lambda:self.btnstate(self.b2))
    
    
    
          layout.addWidget(self.b2)
    
          self.setLayout(layout)
    
          self.setWindowTitle("checkbox demo")
    
    
    
       def btnstate(self,b):
    
          if b.text() == "Button1":
    
             if b.isChecked() == True:
    
                print b.text()+" is selected"
    
             else:
    
                print b.text()+" is deselected"
    
                    
    
          if b.text() == "Button2":
    
             if b.isChecked() == True:
    
                print b.text()+" is selected"
    
             else:
    
                print b.text()+" is deselected"
    
                    
    
    def main():
    
    
    
       app = QApplication(sys.argv)
    
       ex = checkdemo()
    
       ex.show()
    
       sys.exit(app.exec_())
    
        
    
    if __name__ == '__main__':
    
       main()
    
    
  • 输出

    上面的代码产生以下输出 -
    复选框按钮
    
    
    Button2 is selected
    
    Button2 is deselected
    
    Button1 is deselected
    
    Button1 is selected
    
    
    如前所述,复选框按钮可以通过将它们添加到QButtonGroup目的。
    
    
    self.bg = QButtonGroup()
    
    self.bg.addButton(self.b1,1)
    
    self.bg.addButton(self.b2,2)
    
    
    QButtonGroup 对象,为按钮提供抽象容器并且没有视觉表示。它发出 buttonCliked() 信号并将 Button 对象的引用发送到槽函数 btngroup()。
    
    
    self.bg.buttonClicked[QAbstractButton].connect(self.btngroup)
    
    
    btngroup() 函数显示单击复选框的标题。
    
    
    def btngroup(self,btn):
    
       print btn.text()+" is selected"
    
    
    经过上述更改后,应用程序窗口显示如下 -
    btngroup
    
    
    Button1 is selected
    
    Button2 is selected
    
    Button1 is selected