2012-01-12 1 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

これは単なる構文上の問題です。

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

が必要な値を持つvalueを交換してください:あなたはgetattrまたはsetattr(またはdelattr)を使用する必要があります生成された属性をしたい場合は、構文で指定された属性は、識別子でなければなりません。これは実際にはselfとは関係がありません。selfは他の関数の引数であり、他の変数と同様に動作します。

+0

非常にThakします。私は昨日同じ問題を抱えていましたが、getattrを使って、それらを理解するのにもう少し時間が必要だと思われます:) ありがとうもう一度 – nookie

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'(プロバイダのリンクでも言及されています) –