当其中的一个单选按钮更改时,我可以从QGroupbox获得信号吗?

问题描述 投票:0回答:1

我正在PYQT 5中创建用户界面。它包括一个QGroupBox,其中包含几个QRadioButton。当发生切换事件时,我检查按钮并做一些事情。问题在于有两个已切换的事件,因为一个按钮处于打开状态,一个按钮处于关闭状态,因此我的代码始终运行两次。

我一直在从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)

但是只有在切换分组框本身时才有效。当单选按钮之一发生更改时,是否可以通过任何方式从组框获取信号,或者我是否必须找到某种方式来处理单选按钮的单个信号?

python pyqt pyqt5 qgroupbox
1个回答
1
投票

作为@ekhumoro explains,您可以将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')

但是请记住,如果您想在同一个分组框中具有不同的单选按钮“分组”,则这些都不能正常工作,因为它们都将被视为同一单个分组的一部分:所有Qt按钮(小工具)继承QAbstractButton:QPushButton,QToolButton,QCheckBox和QRadioButton)的autoExclusive property默认情况下处于关闭状态,但单选按钮除外。此属性使属于同一父窗口小部件的所有按钮自动互斥。

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

QButtonGroup

还可以从Designer中创建按钮组:只需选择至少两个将成为同一组成员的按钮,右键单击其中一个,然后转到“分配给按钮组”子菜单,然后选择“新建按钮组”。要将按钮添加到现有组,只需使用相同的上下文菜单,然后选择要将按钮添加到的组即可。

© www.soinside.com 2019 - 2024. All rights reserved.