添加到单独的QButtonGroups后,为什么我的QRadioButtons不是'独占'?

时间:2015-05-24 19:31:54

标签: python qt pyqt pyside qradiobutton

from PySide import QtCore
from PySide import QtGui

class UI(QtGui.QDialog):

    def __init__(self):

        super(UI,self).__init__()
        self.setWindowTitle('Test UI 2000')
        self.create_layout()

    def create_layout(self):

        mainLayout = QtGui.QVBoxLayout()
        self.setLayout(mainLayout)

        fruitLabel = QtGui.QLabel('Fruit')
        junkLabel = QtGui.QLabel('Junk')

        buttonGroup1 = QtGui.QButtonGroup()
        radioButtonA = QtGui.QRadioButton('Apple')
        radioButtonB = QtGui.QRadioButton('Pear')
        buttonGroup1.addButton(radioButtonA)
        buttonGroup1.addButton(radioButtonB)

        buttonGroup2 = QtGui.QButtonGroup()
        radioButtonC = QtGui.QRadioButton('Hotdog')
        radioButtonD = QtGui.QRadioButton('Hamburger')
        buttonGroup2.addButton(radioButtonC)
        buttonGroup2.addButton(radioButtonD)

        mainLayout.addWidget(fruitLabel)
        mainLayout.addWidget(radioButtonA)
        mainLayout.addWidget(radioButtonB)
        mainLayout.addWidget(junkLabel)
        mainLayout.addWidget(radioButtonC)
        mainLayout.addWidget(radioButtonD)

if __name__ == '__main__':

    try:
        ui.close()
    except:
        pass

    ui = UI()
    ui.setAttribute(QtCore.Qt.WA_DeleteOnClose)
    ui.show()

我一直在努力理解为什么在将两组QRadioButtons添加到各自的QButtonGroup之后,它们仍然可以像在同一个父级下一样运行。我需要'水果'QRadioButtons独立于'垃圾'QRadioButtons工作。

根据文档,'如果启用了自动独占(默认情况下是这样),属于同一父窗口小部件的单选按钮的行为就好像它们属于同一个独占按钮组'。

将QRadioButtons添加到QVBoxLayout后,我是否以某种方式覆盖了QButtonGroup?

1 个答案:

答案 0 :(得分:1)

我只有PyQt5可用于测试,但能够用它重现您的问题。

create_layout中定义布局时,buttonGroup1buttonGroup2会在返回时被删除。在方法返回后,您需要存储这些变量以使它们存在。例如,可以通过在create_layout的末尾添加以下内容来完成此操作:

def create_layout(self):

    ...

    self.buttonGroups = buttonGroup1, buttonGroup2