Bagaimana cara mencetak string parameter dari properti?
Katakanlah saya memiliki properti khusus ini fu3dm_model_gender: bpy.props.EnumProperty(name="Gender", description="Choose model's gender", items= [('OP1', "Male", ""), ('OP2', "Female", "")], default='OP1')dan saya ingin mencetak string parameter nama. Bagaimana saya bisa melakukan ini?
MEMPERBARUI
Sebenarnya, properti saya adalah bagian dari operator. Dalam contoh berikut saya ingin mendapatkan string nameparameter dan menampilkannya di mana tiga X (XXX) adalah:
class fu3dm_WM_OT_Model_Prefs_Operator(bpy.types.Operator):
bl_idname = "wm.fu3dm_model_prefs"
bl_label = "Model Preferences"
bl_description = "..."
fu3dm_model_gender : bpy.props.EnumProperty(name="Gender", description="Choose model's gender", items= [('OP1', "Male", ""), ('OP2', "Female", "")], default='OP1')
def invoke(self, context, event):
return context.window_manager.invoke_props_dialog(self)
bpy.ops.wm.fu3dm_model_prefs('INVOKE_DEFAULT')
def draw(self, context):
layout = self.layout
# BODY PREFS BOX - START
box = layout.box()
col = box.column()
row = col.split()
row.label(text=XXX)
row.prop(self, "fu3dm_model_gender", text="")
# BODY PREFS BOX - END
def execute(self, context):
pass
return {"FINISHED"}
Jawaban
Iya. Setelah terdaftar, Anda dapat menggunakan bl_rna.propertiesuntuk mengakses nama, jenisnya, item, deskripsi, dll ... Saya sarankan menggunakan konsol python untuk menguji:
>>> test_items = [
... ("RED", "Red", "", 1),
... ("GREEN", "Green", "", 2),
... ("BLUE", "Blue", "", 3),
... ("YELLOW", "Yellow", "", 4),
... ]
>>> bpy.types.Scene.my_enum = bpy.props.EnumProperty(name="Foo", items=test_items)
>>> bpy.types.Scene.bl_rna.properties['my_enum'].name
'Foo'
>>> bpy.types.Scene.bl_rna.properties['my_enum'].enum_items[0]
<bpy_struct, EnumPropertyItem("RED")>
>>> bpy.types.Scene.bl_rna.properties['my_enum'].enum_items[0].name
'Red'
Dalam kasus properti operator, saya sarankan membaca nilai dari dikt anotasi operator:
class SimpleOperator(bpy.types.Operator):
"""Tooltip"""
bl_idname = "object.simple_operator"
bl_label = "Simple Object Operator"
my_prop: bpy.props.StringProperty(name="foo")
def execute(self, context):
# via bl_rna
print (self.properties.bl_rna.properties['my_prop'].name)
# using annotations
print (self.__annotations__.items())
print (self.__annotations__['my_prop'][1]['name'])
return {'FINISHED'}