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"
经过上述更改后,应用程序窗口显示如下 -Button1 is selected Button2 is selected Button1 is selected