要检查所有其他QCheckBox的QCheckbox

问题描述 投票:2回答:1

我的问题与这篇文章Python PyQt - Checkbox to uncheck all other checkboxes非常相似。但是,我试图在选中主复选框时选中所有其他复选框,同时,如果独立选择了任何其他复选框,那么我想取消选中主复选框。我尝试修改提供的答案,但无法绕过“ self.sender”信号。取消选择复选框后,无法更改选择。这是我使用@ eyllanesc提供的解决方案修改的代码。非常感谢您的帮助,谢谢!

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class Test(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
       self.checkBoxAll = QCheckBox("Select All")
       self.checkBoxA    = QCheckBox("Select A")
       self.checkBoxB    = QCheckBox("Select B")

        self.checkBoxAll.setChecked(False)
        self.checkBoxAll.stateChanged.connect(self.onStateChange)
        self.checkBoxA.stateChanged.connect(self.onStateChange)
        self.checkBoxB.stateChanged.connect(self.onStateChange)

        grid = QGridLayout(self)

        grid.addWidget(self.checkBoxAll, 1, 0)
        grid.addWidget(self.checkBoxA, 2, 0)
        grid.addWidget(self.checkBoxB, 3, 0)
        self.setWindowTitle('Test')
        self.show()

    @pyqtSlot(int)
    def onStateChange(self, state):
        if state == Qt.Checked:
            if self.sender() == self.checkBoxAll:
                self.checkBoxA.setChecked(True)
                self.checkBoxB.setChecked(True)
            elif self.sender() in (self.checkBoxA, self.checkBoxB):
                self.checkBoxAll.setChecked(False)
python python-3.x pyqt pyqt5 qcheckbox
1个回答
1
投票

使用您所拥有的逻辑来创建循环,因为任何元素的状态更改都会更改另一个元素的状态,所以想法是,当在状态更改中使用[ C0]:

blockSignals()
© www.soinside.com 2019 - 2024. All rights reserved.