1

在选择检查错误时,我尝试阻止选择该单选按钮。但无论如何它都会被选中,即使使用单次计时器:

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,但我无法阻止按钮被选中,我也将其设置为False,如何如果不满足条件,中止选择单击/按下的单选按钮?

4

1 回答 1

1

问题是由以下原因引起的:

  • QButtonGroup默认情况下, Aexclusive表示将始终选择一个按钮,从而导致该按钮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_())
于 2019-09-21T15:21:39.587 回答