2011-12-28 55 views
0

可能重复:
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”是我试图替代值。如果我做了这一切手动将其woudl看起来像:

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真的很陌生)。

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

谢谢!

+1

你用什么来创建这些表单? PyGTK的? PyQt的? Tkinter的?或者它是网络? – brandizzi 2011-12-28 18:48:27

回答

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) 
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) 

我会感到非常惊讶,不过,如果你的框架没有为您提供一些办法让这些编辑框的列表。

+0

谢谢,这让我走上了正轨:) – user1119821 2011-12-28 19:44:27