通过遍历窗体列表与对象进行循环
问题描述:
可能重复:
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真的很陌生)。
任何帮助/建议非常感谢。
谢谢!
答
有没有阻止你把你的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)
答
我不熟悉您使用的框架,但如果你想用一个程序产生的名称访问属性,你可能会希望使用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
你用什么来创建这些表单? PyGTK的? PyQt的? Tkinter的?或者它是网络? – brandizzi 2011-12-28 18:48:27