【问题标题】:Why aren't my QRadioButtons 'exclusive' after being added to separate QButtonGroups?为什么我的 QRadioButtons 在添加到单独的 QButtonGroups 后不是“独占的”?
【发布时间】:2015-05-24 19:31:53
【问题描述】:
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?

【问题讨论】:

    标签: python qt pyqt pyside qradiobutton


    【解决方案1】:

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

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

    def create_layout(self):
    
        ...
    
        self.buttonGroups = buttonGroup1, buttonGroup2
    

    【讨论】:

    • 太棒了!那成功了。我对这一切都很陌生,但我认为在我的类中定义属性时我应该何时使用“自我”仍然有点模糊。我看过其他人的 pyside 示例,其中他们用来存储按钮的变量以 'self' 开头,但他们的布局不是。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多