使用enumproperty来创建具有枚举值的属性。该属性可以显示为菜单列表或仅限图标,以激活相应的工具。
下面是使用菜单列表的例子:
import bpy
class SimpleToolPanel(bpy.types.Panel):
bl_label = "Simple Tool Panel"
bl_idname = "PT_simple_tool_panel"
bl_space_type = "VIEW_3D"
bl_region_type = "UI"
bl_category = "Tools"
def draw(self, context):
layout = self.layout
#创建具有枚举值的属性
enum_prop = context.scene.enum_prop
#使用菜单列表来显示属性
layout.prop(enum_prop, "enum_menu_list")
#根据选择的枚举值激活相应的工具
if enum_prop.enum_menu_list == 'TOOL_1':
layout.operator("object.move", text="Move Tool")
elif enum_prop.enum_menu_list == 'TOOL_2':
layout.operator("object.rotate", text="Rotate Tool")
elif enum_prop.enum_menu_list == 'TOOL_3':
layout.operator("object.scale", text="Scale Tool")
#创建具有枚举值的属性
class EnumPropertyGroup(bpy.types.PropertyGroup):
enum_menu_list: bpy.props.EnumProperty(
items=(
('TOOL_1', "Move Tool", ""),
('TOOL_2', "Rotate Tool", ""),
('TOOL_3', "Scale Tool", "")
)
)
#注册面板和属性
classes = (
SimpleToolPanel,
EnumPropertyGroup,
)
def register():
for cls in classes:
bpy.utils.register_class(cls)
#将属性添加到场景中
bpy.types.Scene.enum_prop = bpy.props.PointerProperty(type=EnumPropertyGroup)
def unregister():
for cls in reversed(classes):
bpy.utils.unregister_class(cls)
#移除属性
del bpy.types.Scene.enum_prop
if __name__ == "__main__":
register()
下