首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让用户从未知数量的复选框( PyQt5 )中只运行两个复选框?

如何让用户从未知数量的复选框( PyQt5 )中只运行两个复选框?
EN

Stack Overflow用户
提问于 2021-11-08 08:26:25
回答 1查看 92关注 0票数 1

如果复选框是随机的(5-10),我想限制用户选择任意两个复选框。self.check_boxes = [QtWidgets.QCheckBox(self.dockWidgetContents_2) for i in col_names],这是我正在生成的复选框列表。请帮我做我想要的复选框。这是我的密码:

def uncheck(self, state):

代码语言:javascript
复制
`if state == Qt.CheckState.Checked:
    global checkedItems
    try:
        senderCheckBox = [i for i in self.check_boxes if i.isChecked() and not i in checkedItems][0]
        checkedItems[0] = checkedItems[1]
        checkedItems[1] = senderCheckBox
        itemsToUncheck = [i for i in self.check_boxes if not i in checkedItems]
        for checkBox in itemsToUncheck:
            checkBox.setChecked(False)`
EN

回答 1

Stack Overflow用户

发布于 2022-01-16 18:47:25

为了保留选中的号码,必须跟踪复选框切换的顺序。

要获得对切换复选框的引用,可以使用QButtonGroup,它具有一个buttonToggled信号,它同时发出复选框和新状态。

在连接到该信号的函数中,将复选框附加到持久列表(不要使用globals!)如果状态被选中并取消选中,则保持取消检查第一项,直到遵守数字;在相同的函数中,如果状态未选中,则从该列表中删除复选框。这样,由于信号在同一个线程中是同步的,所以您可以使用一个简单的while循环,并且可以确定顺序将始终得到遵守。

代码语言:javascript
复制
class Test(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()
        layout = QtWidgets.QVBoxLayout(self)
        self.checked = []
        self.buttonGroup = QtWidgets.QButtonGroup(exclusive=False)
        for i in range(5):
            checkBox = QtWidgets.QCheckBox('Check {}'.format(i + 1))
            layout.addWidget(checkBox)
            self.buttonGroup.addButton(checkBox)

        self.buttonGroup.buttonToggled.connect(self.limitChecked)

    def limitChecked(self, checkBox, state):
        if state:
            self.checked.append(checkBox)
            # do *NOT* use a "for", as the list might change in the meantime
            while len(self.checked) > 2:
                self.checked[0].setChecked(False)
        else:
            if checkBox in self.checked:
                self.checked.remove(checkBox)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69880484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档