使用for循环遍历表单对象列表

时间:2011-12-28 18:46:54

标签: python for-loop

  

可能重复:
  Changing variable names with Python for loops

我创建了一个包含24行编辑框(对象)的表单。我想根据用户输入的数据更新每个对象的属性(我想启用或禁用行编辑框)。

所以我想尝试做类似的事情:

    if self.cmbSelectDevice.currentText() == 'Adtran 904' :
        for EnableLine in range(1,  5) :
            self.lblFxsLine'EnableLine'.setEnabled(1)
        for DisableLine in range (6, 24) :
            self.lblFxsLine'DisableLine'.setEnabled(0)

'EnableLine'和'DisableLine'是我试图替换的值。如果我手动完成所有操作,它应该看起来像:

    if self.cmbSelectDevice.currentText() == 'Adtran 904' :
        self.lblFxsLine1.setEnabled(1)
        self.lblFxsLine2.setEnabled(1)
        self.lblFxsLine3.setEnabled(1)
        etc...
        self.lblFxsLine6.setEnabled(0)
        self.lblFxsLine7.setEnabled(0)
        etc...

列表和词典在这里并没有真正起作用,因为我试图操纵表单中对象的属性(至少我认为它们没有,我对python很新)。

非常感谢任何帮助/建议。

谢谢!

2 个答案:

答案 0 :(得分:1)

毫无阻碍您将lblFxsLine放入字典或列表中。

self.lblFxsLines = [lblFxsLine for i in range(1,25)]

...

if self.cmbSelectDevice.currentText() == 'Adtran 904' :
    for enableLine in range(1,  5) :
        self.lblFxsLines[enableLine].setEnabled(1)
    for disableLine in range (6, 24) :
        self.lblFxsLines[disableLine].setEnabled(0)

答案 1 :(得分:0)

我不熟悉您正在使用的框架,但如果您想要使用程序生成的名称访问属性,则可能需要使用getattr

您的示例将变为:

for enable_line in range(1, 6):  # Note: upper bound is exclusive
    getattr(self, 'lblFxsLine%d' % enable_line).setEnabled(1)
for disable_line in range(6, 25):
    getattr(self, 'lblFxsLine%d' % disable_line).setEnabled(0)

但是,如果您的框架没有为您提供某些方法来获取这些编辑框的列表,我会感到非常惊讶。

相关问题