$\开始组$

我目前正在尝试将预置添加到我正在开发的插件中,虽然创建和加载这些预置工作得很好,但更新面板中使用属性的值并不像我想象的那样工作。虽然其他本地预设菜单(如渲染分辨率菜单)将在您单击预设时更新,但我的值不会更新。只有在移动鼠标后,面板中的所有值才会更改。我必须在某处包含更新例程吗?

我使用的是搅拌机使用的相同系统。

这是我的密码

导入bpy从bl_operators.presets导入AddPresetBase从bl_ui.utils导入预设面板从bpy.types导入面板、菜单、操作员、WindowManager从bpy.props导入(布尔属性,字符串属性,国际财产,Float属性)类CustomProperties(bpy.types.PropertyGroup):fps:IntProperty(名称=“fps”,默认值=24,最小值=1,最大值=244)质量:IntProperty(名称=“质量”,默认值=75,最小值=1,最大值=100)类My_OP(运算符):bl_idname=“我的.operator”bl_label=“我的酷OP”bl_options={“预设”}类MY_MT_Presets(菜单):bl_label='我的预设'preset_subdir='对象/我的预设'preset_operator=“script.execute_preset”draw=菜单.raw_preset类OT_AddMyPreset(AddPresetBase,运算符):bl_idname='my.add_preset'bl_label='添加预设'preset_menu=“MY_MT_Presets”#用于所有预设值的通用变量预设定义=[“obj=bpy.context.object”,'场景=bpy.context.scene']#要存储在预设中的属性预设值=['场景.custom_properties.fps','场景.custom_properties.quality']#存储预设的目录preset_subdir='对象/我的重置'类MY_PT_presets(预设面板,面板):bl_label='我的预设'preset_subdir='对象/my_prets'preset_operator=“script.execute_preset”preset_add_operator='my.add_preset'类My_PT_Panel(面板):bl_label='我的面板'bl_space_type='属性'bl_region_type=“窗口”bl_context='输出'bl_category=“输出”定义draw_header_preset(self,_context):MY_PT_presets.draw_panel_header(自我布局)定义绘制(自身,上下文):scene=上下文场景props=场景自定义属性layout=自布局row=布局.rowlayout.prop(props,“fps”)layout.prop(props,“质量”)定义寄存器():bpy.utils.register_class(自定义属性)bpy.utils.register_class(My_OP)bpy.utils.register_class(MY_MT_Presets)bpy.utils.register_class(OT_AddMyPreset)bpy.utils.register_class(MY_PT_presets)bpy.utils.register_class(My_PT_Panel)bpy.types类型。Scene.custom_properties=bpy.props。指针属性(类型=自定义属性)def unregister():bpy.utils.unregister_class(自定义属性)bpy.utils.unregister_class(My_OP)bpy.utils.unregister_class(MY_MT_Presets)bpy.utils.unregister_class(OT_AddMyPreset)bpy.utils.unregister_class(MY_PT_presets)bpy.utils.unregister_class(My_PT_Panel)删除bpy.types。场景自定义属性如果__name__==“__main__”:寄存器()

这是它在搅拌机里的样子。它位于“渲染输出面板”中在此处输入图像描述

单击预设后,它应该更新面板中的值,但只有在将鼠标移出黑匣子后才会更新。

有人知道这是什么原因吗?

$\端组$

2个答案2

重置为默认值
$\开始组$

这是一种不同的方法

导入bpy从bl_operators.presets导入AddPresetBase从bl_ui.utils导入预设面板从bpy.types导入面板、菜单、操作员、WindowManager从bpy.props导入BoolProperty、StringProperty,IntProperty和FloatProperty类CustomProperties(bpy.types.PropertyGroup):fps:IntProperty(名称=“fps”,默认值=24,最小值=1,最大值=244)质量:IntProperty(名称=“质量”,默认值=75,最小值=1,最大值=100)类My_OP(运算符):bl_idname=“我的操作员”bl_label=“我的酷OP”bl_options={“预设”}类MY_MT_Presets(菜单):bl_label=“我的预设”preset_subdir=“对象/我的重置”preset_operator=“script.execute_preset”preset_add_operator=“我的.add_preset”preset_operator_defaults={“menu_idname”:“MY_MT_Presets”}定义绘制(自身,上下文):self.draw_preset(上下文)类OT_AddMyPreset(AddPresetBase,运算符):bl_idname=“my.add_preset”bl_label=“添加预设”preset_menu=“MY_MT_预设”#存储预设的目录preset_subdir=“对象/我的重置”#用于所有预设值的通用变量preset_defines=[“obj=bpy.context.object”,“scene=bpy.context.scene”]#要存储在预设中的属性preset_values=[“scene.custom_properties.fps”,“scene.coustom_properties.quality”]类MY_PT_presets(预设面板,面板):bl_label=“我的预设”定义绘制(自身,上下文):layout=自布局layout.emboss=“PULLDOWN_MENU”layout.operator_context=“EXEC_DEFAULT”layout.menu_contents(“MY_MT_Presets”)context.aream.tag_redraw()类My_PT_Panel(面板):bl_label=“我的面板”bl_space_type=“属性”bl_region_type=“窗口”bl_context=“输出”bl_category=“输出”定义draw_header_preset(self,_context):MY_PT_presets.draw_panel_header(自我布局)定义绘制(自身,上下文):scene=上下文场景props=场景自定义属性layout=自布局row=布局.rowlayout.prop(props,“fps”)layout.prop(props,“质量”)定义寄存器():bpy.utils.register_class(自定义属性)bpy.utils.register_class(My_OP)bpy.utils.register_class(MY_MT_Presets)bpy.utils.register_class(OT_AddMyPreset)bpy.utils.register_class(MY_PT_presets)bpy.utils.register_class(My_PT_Panel)bpy.types类型。Scene.custom_properties=业务流程道具。指针属性(类型=自定义属性)def unregister():bpy.utils.unregister_class(自定义属性)bpy.utils.unregister_class(My_OP)bpy.utils.unregister_class(MY_MT_Presets)bpy.utils.unregister_class(OT_AddMyPreset)bpy.utils.unregister_class(MY_PT_presets)bpy.utils.unregister_class(My_PT_Panel)删除bpy.types。场景自定义属性如果__name__==“__main__”:寄存器()
$\端组$
$\开始组$

另一种方式:

添加到第57行:定义_删除_(自身):bpy.context.area.tag_redaw()

类MY_PT_presets(预设面板,面板):bl_label='我的预设'preset_subdir='对象/我的重置'preset_operator=“script.execute_preset”preset_add_operator='my.add_preset'定义_删除_(自身):bpy.context.area.tag_redaw()
$\端组$

你必须登录来回答这个问题。

不是你想要的答案吗?浏览标记的其他问题.