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()

Output

上面的代码产生以下输出 −

CheckBox Buttons
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

❮ PyQt5 基本小部件