PySide - 循环中的组单选按钮

PySide - Group radioButton in a loop

我在尝试将循环生成的 radioButton 组合在一起时遇到问题,这样每一行都有一个 buttonGroup 并且可以单独检查。

这是我的代码的精简版:

def ui_layout(self):
    self.main_layout = QVBoxLayout()
    self.setLayout(self.main_layout)

    attrs = ['a', 'b']

    for attr in attrs:

        buttonGroup = QButtonGroup()

        self.attr_layout = QHBoxLayout()
        self.main_layout.addLayout(self.attr_layout)

        self.rb1 = QRadioButton('{}_rb1'.format(attr))
        self.attr_layout.addWidget(self.rb1)
        buttonGroup.addButton(self.rb1)

        self.rb2 = QRadioButton('{}_rb2'.format(attr))
        self.attr_layout.addWidget(self.rb2)
        buttonGroup.addButton(self.rb2)

我得到的是这个:

如果您想尝试一下,这里是完整的代码:https://pastebin.com/3vJ4DXER

试一试:

import sys
from PyQt5.QtWidgets import (QRadioButton, QVBoxLayout, QHBoxLayout,
                             QButtonGroup, QApplication, QWidget)

class Window(QWidget):

    def __init__(self):
        super().__init__()

        self.init_ui()

    def init_ui(self):

        self.main_layout = QVBoxLayout()
        self.setLayout(self.main_layout)

        attrs            = ['a', 'b']
        self.buttonGroup = ['a', 'b']
        for i, attr in enumerate(attrs):
            self.buttonGroup[i] = QButtonGroup()

            self.attr_layout = QHBoxLayout()
            self.main_layout.addLayout(self.attr_layout)

            self.rb1 = QRadioButton('{}_rb1'.format(attr))
            self.attr_layout.addWidget(self.rb1)
            self.buttonGroup[i].addButton(self.rb1)

            self.rb2 = QRadioButton('{}_rb2'.format(attr))
            self.attr_layout.addWidget(self.rb2)
            self.buttonGroup[i].addButton(self.rb2)    

            self.buttonGroup[i].buttonClicked.connect(self.check_button)

    def check_button(self, radioButton):
        print("radioButton-> `{}`".format(radioButton.text()))

app = QApplication(sys.argv)
a_window = Window()
a_window.show()
sys.exit(app.exec_())