📜  PyQt5 - 在一组复选框中选择任何一个复选框(1)

📅  最后修改于: 2023-12-03 15:33:51.366000             🧑  作者: Mango

PyQt5 - 在一组复选框中选择任何一个复选框

在 PyQt5 中,复选框是常用的控件之一。在一组复选框中,可以让用户选择多项内容。但是,有时候我们希望用户只能选择其中一个复选框,而不能同时选择多个。这个时候,就需要实现一组互斥的复选框。

实现一组互斥的复选框

实现一组互斥的复选框,需要用到 Qt 中的 QButtonGroup 类。QButtonGroup 对象可以维护一组按钮,并且可以设置这组按钮互斥(即只能选中其中一个按钮)。以下是一个实现一组互斥的复选框的示例代码:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QCheckBox, QVBoxLayout, QButtonGroup

class Example(QWidget):
    
    def __init__(self):
        super().__init__()
        
        # 初始化窗口和布局
        self.initUI()
        
    def initUI(self):
        
        # 创建复选框和布局
        self.cb1 = QCheckBox('Checkbox 1')
        self.cb2 = QCheckBox('Checkbox 2')
        self.cb3 = QCheckBox('Checkbox 3')
        vbox = QVBoxLayout()
        vbox.addWidget(self.cb1)
        vbox.addWidget(self.cb2)
        vbox.addWidget(self.cb3)
        
        # 创建 QButtonGroup 对象,并将复选框添加进去
        self.group = QButtonGroup()
        self.group.addButton(self.cb1, 1)
        self.group.addButton(self.cb2, 2)
        self.group.addButton(self.cb3, 3)
        self.group.buttonClicked[int].connect(self.onClicked)
        
        # 设置窗口布局并显示窗口
        self.setLayout(vbox)
        self.setGeometry(300, 300, 300, 150)
        self.setWindowTitle('PyQt5 - Checkbox Example')
        self.show()
        
    def onClicked(self, id):
        
        # 当任何一个复选框被点击时,获取当前选中的按钮的 ID 并打印到控制台
        print('Checkbox %d clicked' % id)

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

在这个示例代码中,我们创建了 3 个复选框,并用 QButtonGroup 对象将它们添加进去。通过连接 QButtonGroup 对象的 buttonClicked 信号,我们可以在任何一个复选框被点击时获取当前选中的复选框的 ID。同时,由于我们将这三个复选框添加到同一个 QButtonGroup 对象中,因此当用户选中其中一个复选框时,其他的复选框都会被取消选中。

结语

本文介绍了在 PyQt5 中实现一组互斥的复选框的方法。通过使用 QButtonGroup 对象,我们可以轻松地让一组复选框成为互斥的。同时,我们还演示了如何在复选框被点击时获取选中的复选框的 ID。以上就是本文的全部内容。