QRadioButton, как добавить проверку выбора? - PullRequest
1 голос
/ 21 сентября 2019

При выборе проверки false я пытаюсь предотвратить выбор этой кнопки.Но он все равно выбирается, даже с таймером одиночной съемки:

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

РЕДАКТИРОВАТЬ:
Предполагается, что группа кнопок, я пытаюсь перехватить вызов прессы (не нажал), чтобы не выбрать этот переключатель, еслиПользовательский тест имеет значение false (if True: #some check), но я не могу предотвратить выбор кнопки, также я установил ее на False, как отменить выбор переключаемой кнопки, если условие не выполнено?

1 Ответ

1 голос
/ 21 сентября 2019

Проблема вызвана:

  • A QButtonGroup по умолчанию exclusive, что означает, что кнопка всегда будетбыть выбранным, в результате чего 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_())
...