pythonpyside2qradiobutton

QRadioButton how add a selection check?


On a selection check false i try to prevent the selection of that radiobutton. But it does get selected anyway, even with singleshot timer:

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))

EDIT:
Assume a button group, i try to intercept the press call (not clicked) to not select that radio button if a custom test is false (if True: #some check), but i cannot prevent the button from being selected also i set it to False, how do abort the selection of the clicked/pressed radio button if a condition is not met?


Solution

  • The problem is caused by:

    Considering the previous one in the next part I show a 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_())