2012-01-12 118 views
1

我有這樣的代碼來創建一個接口和一些按鈕(在Maya中的Python)創建一個變量名動態

class mrShadowMapChangerUI: 
    def __init__(self): 

     smAttrs = ['shadowMap','smapResolution','smapSamples','smapSoftness','smapBias'] 
     smNiceAttrs = ['Active','Resolution','Samples','Softness','Bias'] 
     attrs = zip(smAttrs,smNiceAttrs) 

     self.form = mc.columnLayout() 

     self.smapResolutionField = mc.textFieldButtonGrp( label=attrs[1][1], text=int(defaultLightValues[1]),  bc=Callback(self.setSmValue, attrs[1][0])) 
     self.smapSamplesField =  mc.textFieldButtonGrp( label=attrs[2][1], text=int(defaultLightValues[2]),  bc=Callback(self.setSmValue, attrs[2][0])) 
     self.smapSoftnessField = mc.textFieldButtonGrp( label=attrs[3][1], text=('%.3f' % defaultLightValues[3]), bc=Callback(self.setSmValue, attrs[3][0])) 
     self.smapBiasField =  mc.textFieldButtonGrp( label=attrs[4][1], text=('%.3f' % defaultLightValues[4]), bc=Callback(self.setSmValue, attrs[4][0])) 

,我想將它變成像這樣的東西自動,知道他們創建的按鈕名字(所以我以後可以查詢他們)

class mrShadowMapChangerUI: 
    def __init__(self): 

     smAttrs = ['shadowMap','smapResolution','smapSamples','smapSoftness','smapBias'] 
     smNiceAttrs = ['Active','Resolution','Samples','Softness','Bias'] 
     attrs = zip(smAttrs,smNiceAttrs) 

     self.form = mc.columnLayout() 
     for attr in attrs: 
      self.('%s' % attr[0]) = mc.textFieldButtonGrp( label=attr[1], text=int(defaultLightValues[1]),  bc=Callback(self.setSmValue, attr[0])) 

     mc.showWindow(self.window) 

我真的有理解這一切的煩惱「自我」。工作流程,所以可能我失去了一些基本的東西,但所有我迄今爲止所嘗試的都沒有工作:S

謝謝!

回答

2

這只是一個語法問題。在語法中指定的屬性必須是標識符,如果你想你需要使用getattrsetattr(或delattr)生成的屬性:

for attr, nice in zip(attrs, niceAttrs): 
    setattr(self, attr, value) 

替換value你想要的值。這與self無關:self只是另一個函數參數,其行爲與其他變量相同。

+0

非常感謝。我昨天有同樣的問題,但與getattr,似乎我需要多一點時間來了解這些:) 再次感謝 – nookie 2012-01-12 07:20:39

2

setattr怎麼樣?

class Foo: 
    def __init__(self): 
     # Set attribute "bar" on this object to the number 1 
     setattr(self, "bar", 1) 
+0

我喜歡備用語法'x.foobar = 123'(在提供商鏈接中也提到) – 2012-01-12 07:14:22