PyQt4 动态创建单选按钮和默认检查

PyQt4 Dynamically created radiobuttons and default checking

我想为从 2013 年开始的每一年动态创建单选按钮。我已经创建了这些按钮,但我无法检查第一个单选按钮 (2013)。为此,我使用 QtGui.QRadioButton('2013').setChecked(True)

我不知道我错过了什么...

def dynamicaly_cratede_radiobtns(self):
    current_year = datetime.today().year
    self.button_group = QtGui.QButtonGroup()

    for i in range(2013, current_year+1):
        self.button_name = QtGui.QRadioButton("{}".format(i))
        self.button_name.setObjectName("radiobtn_{}".format(i))
        self.verticalLayout.addWidget(self.button_name)
        self.button_group.addButton(self.button_name,i)
        self.button_name.toggled.connect(self.subplot_year)

    QtGui.QRadioButton('2013').setChecked(True)

def subplot_year(self):
    print self.button_group.checkedId()

编辑 我刚刚使用 if

解决了它
        for i in range(2013, current_year+1):
        self.button_name = QtGui.QRadioButton("{}".format(i))
        self.button_name.setObjectName("radiobtn_{}".format(i))
        self.verticalLayout.addWidget(self.button_name)
        self.button_group.addButton(self.button_name,i)
        self.button_name.toggled.connect(self.subplot_year)
        if i == 2013:
            self.button_name.setChecked(True)

但是不管怎样,为什么原来的方法不管用呢?我认为这是更优雅的解决方案。

QtGui.QRadioButton('2013').setChecked(True)

创建文本值为 '2013' 的新单选按钮。这个被检查了。

此单选按钮不属于任何布局或单选组,因此未选中任何按钮。

您似乎认为单选按钮缓存在某处并且可以使用文本值访问。但事实并非如此。

要解决此问题,您需要像在编辑中一样检查添加到布局的按钮之一。