【问题标题】:Blender Property not Updating While Needed (Python)Blender 属性在需要时不更新(Python)
【发布时间】:2016-09-19 11:24:37
【问题描述】:

我正在尝试使用 Blender Python API 设置属性并将其添加到 RotationSyncFinalValue List列表已按所需方式设置,但属性未更新,因此列表未显示值。

这是我定义属性的代码:

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

这里是我在 Panel 中设置属性的地方:

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])

【问题讨论】:

    标签: python list properties blender


    【解决方案1】:

    如果您使用的是您提到的数组,那么您可以查看文档并了解无法使用数组对象将列表传递给此函数。

    array.extend(可迭代) 将可迭代的项目附加到数组的末尾。如果 iterable 是另一个数组,它必须具有完全相同的类型代码;如果没有,将引发 TypeError。如果 iterable 不是数组,则它必须是可迭代的,并且它的元素必须是正确的类型才能附加到数组中。 https://docs.python.org/2/library/array.html

    如果是拼写错误并且 RotationSyncFinalValue 是一个列表,请添加更多信息以便我们为您提供帮助。

    【讨论】:

      【解决方案2】:

      您为任务使用了错误的类型。 EnumProperty 是必须存在于已定义的可接受值列表中的单个值,传递给构造函数的项目列表是属性可接受的值列表,不在初始列表中的值不能分配给属性。

      我希望您想查看为CollectionProperty 给出的示例,最终得到类似 -

      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
      

      然后在你的面板中你可以使用 -

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

      由于您似乎想要三个具有相同值的属性,您应该考虑使用custom get/set functions,这可以确保所有三个属性保持同步(或只存储一个值),您可以将 get/set 添加到PropertyGroup 类中的属性。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-12-28
        • 1970-01-01
        • 1970-01-01
        • 2017-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多