当其中的一个单选按钮发生变化时,我可以从 QGroupbox 获得信号吗?

Can I get a signal from a QGroupbox when one of the radiobuttons in it is changed?

我正在 PYQT 5 中制作一个用户界面。它包括一个包含多个 QRadioButton 的 QGroupBox。当有一个切换事件时,我检查按钮并做一些事情。问题是有两个切换事件,因为一个按钮打开一个关闭,所以我的代码总是 运行 两次。

我一直在寻找来自 QGroupBox 的事件。当我切换单选按钮时,这应该只发生一次而不是两次。

    def __init__(self):
        self.radioButton1.toggled.connect(self.update_stimulus)
        self.radioButton2.toggled.connect(self.update_stimulus)
        self.radioButton3.toggled.connect(self.update_stimulus)

    def update_stimulus(self):
        if self.radioButton1.isChecked():
            print('1')
        if self.radioButton2.isChecked():
            print('2')
        if self.radioButton3.isChecked():
            print('3')
        # Do stuff based on button positions

我试过使用

self.groupBox.toggled.connect(self.update_stimulus)

但这只有在组框本身被切换时才有效。当其中一个单选按钮发生变化时,是否有任何方法可以从组框中获取信号,或者我是否必须找到某种方法来处理来自单选按钮的单独信号?

作为,你可以在函数中添加checked参数,只有当它是True:

时才做你的处理
def update_stimulus(self, checked):
    if not checked:
        return
    if self.radioButton1.isChecked():
        print('1')
    if self.radioButton2.isChecked():
        print('2')
    if self.radioButton3.isChecked():
        print('3')

不过请记住,如果您想在同一组框中使用不同的单选按钮 "groups",其中的 none 将正常工作,因为它们都将被视为同一组:所有 Qt 按钮(继承 QAbstractButton 的小部件:QPushButton、QToolButton、QCheckBox 和 QRadioButton)都有一个 autoExclusive property 默认情况下关闭,单选按钮除外。 属性 使属于同一父小部件的所有按钮自动独占。

如果您需要同一父项中的不同组,解决方案是使用 QButtonGroup,它通过将每个按钮的成员资格限制为特定组来扩展独占功能。

def __init__(self):
    # ...
    self.buttonGroupA = QtWidgets.QButtonGroup()
    self.buttonGroupA.addButton(self.radioButton1)
    self.buttonGroupA.addButton(self.radioButton2)
    self.buttonGroupA.addButton(self.radioButton3)
    self.buttonGroupA.buttonToggled[QtWidgets.QAbstractButton, bool].connect(self.update_stimulusA)

    self.buttonGroupB = QtWidgets.QButtonGroup()
    self.buttonGroupB.addButton(self.radioButton4)
    self.buttonGroupB.addButton(self.radioButton5)
    self.buttonGroupB.addButton(self.radioButton6)
    self.buttonGroupB.buttonToggled[QtWidgets.QAbstractButton, bool].connect(self.update_stimulusB)

def update_stimulusA(self, btn, checked):
    if not checked:
        return
    # do something with group A

def update_stimulusB(self, btn, checked):
    if not checked:
        return
    # do something with group B

也可以从 Designer 创建按钮组:只需 select 至少两个属于同一组的按钮,右键单击其中一个按钮,转到 "Assign to button group"子菜单和 select "New button group"。要将按钮添加到现有组,只需使用相同的上下文菜单并选择要将该按钮添加到的组。