首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当QGroupbox中的一个无线电按钮改变时,我能从它得到一个信号吗?

当QGroupbox中的一个无线电按钮改变时,我能从它得到一个信号吗?
EN

Stack Overflow用户
提问于 2019-11-09 15:52:38
回答 1查看 3K关注 0票数 1

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

我一直在寻找一个事件从QGroupBox代替。这应该只发生一次,而不是两次当我切换一个无线电按钮。

代码语言:javascript
复制
    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

我试着用

代码语言:javascript
复制
self.groupBox.toggled.connect(self.update_stimulus)

但是,只有当群盒本身被切换时,这才能起作用。当其中一个无线电按钮发生变化时,是否有任何方法从群组盒中获取信号,或者我是否必须找到某种方法来处理来自无线电按钮的独立信号?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-09 19:45:59

作为@ekhumoro explains,您可以将checked参数添加到函数中,并且只有当它是True时才能执行处理

代码语言:javascript
复制
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 property是关闭的。此属性使属于同一个父小部件的所有按钮自动排它。

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

代码语言:javascript
复制
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

从设计器中也可以创建按钮组:只需选择至少两个将是同一组成员的按钮,右键单击其中一个按钮,转到“分配到按钮组”子菜单并选择“新建按钮组”。若要向现有组添加按钮,只需使用相同的上下文菜单并选择要将该按钮添加到的组。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58780920

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档