QRadioButton 如何添加一个选择检查?

QRadioButton how add a selection check?

在 selection check false 上,我尝试阻止该单选按钮的 selection。但无论如何,它确实得到 selected,即使使用单发计时器也是如此:

class MyQWidget(QWidget):
    def __init__(self):
        QWidget.__init__(self)
        ...


        self.ui.buttonGroup.buttonPressed.connect(self.is_init)

    def is_init(self, button): 
        if True: #some check here to prevent selection of it
            print('no select')
            QTimer.singleShot(0, lambda: button.setChecked(False))

编辑:
假设一个按钮组,如果自定义测试为假(if True: #some check),我会尝试拦截新闻电话(未点击)而不是 select 那个单选按钮,但我无法阻止按钮 selected 我也将其设置为 False,如果不满足条件,如何中止 clicked/pressed 单选按钮的 selection?

问题是由于:

  • A QButtonGroup is by default exclusive which implies that a button will always be selected causing the setChecked(False) 不起作用,因为这意味着没有按下任何按钮,因此需要在更改中启用和禁用 属性。

  • 状态的改变不是在按下时发生,而是在释放时发生,所以必须使用buttonReleased信号。

考虑到下一部分中的前一个,我展示了一个 MWE:

from PySide2 import QtCore, QtWidgets


class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)

        self.buttonGroup = QtWidgets.QButtonGroup(self)
        self.buttonGroup.buttonReleased.connect(self.on_buttonReleased)

        lay = QtWidgets.QHBoxLayout(self)

        for i in range(4):
            button = QtWidgets.QRadioButton(f"button-{i}")
            lay.addWidget(button)
            self.buttonGroup.addButton(button)

    @QtCore.Slot(QtWidgets.QAbstractButton)
    def on_buttonReleased(self, button):
        if True:
            self.buttonGroup.setExclusive(False)
            button.setChecked(False)
            self.buttonGroup.setExclusive(True)


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.resize(640, 240)
    w.show()
    sys.exit(app.exec_())