我创建了一个包含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很新)。
非常感谢任何帮助/建议。
谢谢!
答案 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)
但是,如果您的框架没有为您提供某些方法来获取这些编辑框的列表,我会感到非常惊讶。