2016-05-22 73 views
3

我正在嘗試使用Blender Python API設置屬性並將其添加到RotationSyncFinalValue 列表列表按需要的方式設置,但屬性不更新,因此列表未顯示值。Blender屬性不需要更新(Python)

下面的代碼,我定義屬性:

atr = bpy.types.Scene 
RotationSyncFinalValue = [] 
atr.RotationSyncValuesList =EnumProperty(
items= RotationSyncFinalValue, 
name = "List", 
description = "Select The Action to Do with the Value") 

這裏是我設置面板中的屬性:

layout = self.layout 
scene = bpy.context.scene 
col.prop(scene,"RotationSyncValuesList") 
col = layout.column(align=True) 

這是我嘗試將值添加到陣列RotationSyncFinalValue

fvalue = ('{0:.4f}'.format(value), 
'{0:.4f}'.format(value), 
'{0:.4f}'.format(value)) 
RotationSyncFinalValue.extend([fvalue]) 

回答

0

您對任務使用了錯誤的類型。 EnumProperty是必須存在於已定義的可接受值列表中的單個值,傳遞給構造函數的項目列表是屬性可接受的值列表,不在初始列表中的值不能分配給屬性。

我希望你要看看在CollectionProperty給出的例子喜歡的東西就結了 - 正如你似乎想

for p in scene.RotationSyncValuesList: 
    row = col.row() 
    row.prop(p, 'x') 
    row.prop(p, 'y') 
    row.prop(p, 'z') 

-

class RotationSyncValuesType(bpy.types.PropertyGroup): 
    x = bpy.props.FloatProperty(name='x', default=0.0) 
    y = bpy.props.FloatProperty(name='y', default=0.0) 
    z = bpy.props.FloatProperty(name='z', default=0.0) 

bpy.utils.register_class(RotationSyncValuesType) 
bpy.types.Scene.RotationSyncValuesList = \ 
     bpy.props.CollectionProperty(type=RotationSyncValuesType) 

fvalue = bpy.context.scene.RotationSyncValuesList.add() 
fvalue.x = 1.0 
fvalue.y = 1.0 
fvalue.z = 1.0 

fvalue = bpy.context.scene.RotationSyncValuesList.add() 
fvalue.x = 2.0 
fvalue.y = 2.0 
fvalue.z = 2.0 

然後在你的面板,您可以使用三個具有相同值的屬性,你應該看看使用custom get/set functions,這可以確保所有三個屬性保持同步(或只存儲一個值),您可以將get/set添加到PropertyGroup類中的屬性。

0

如果你像前面提到的那樣使用數組,那麼你可以查看文檔並理解不能使用數組對象將列表傳遞給該函數。

array.extend(可迭代) 將項目從iterable附加到數組的末尾。如果可迭代是另一個數組,它必須具有完全相同的類型代碼;如果不是,則會引發TypeError。如果iterable不是數組,則它必須是可迭代的,並且其元素必須是要附加到數組的正確類型。 https://docs.python.org/2/library/array.html

如果這是一個錯字和RotationSyncFinalValue是一個列表,請添加更多的信息,所以我們可以幫助你。