如何在Blender中满足条件时才显示导出文件窗口?
Blender导出操作:仅验证通过时显示导出对话框
ExportHelper 默认会在 Operator 的 invoke 阶段自动弹出文件选择窗口,你之前在 execute 里的判断逻辑根本来不及阻止窗口弹出。正确的做法是把验证逻辑移到 invoke 方法里,先验证再决定是否显示窗口。
修改后的代码如下:
import bpy from bpy_extras.io_utils import ExportHelper def validate(): # 替换为你的自定义验证逻辑,返回True/False # 示例:检查是否有选中的物体 return len(bpy.context.selected_objects) > 0 class OBJECT_OT_export_model(bpy.types.Operator, ExportHelper): bl_idname = 'flex.export' bl_label = "Export" filename_ext = ".fbx" # 按需修改导出格式后缀 def invoke(self, context, event): # 先执行模型验证 if not validate(): self.report({'ERROR'}, "模型验证失败,无法导出") return {'CANCELLED'} # 验证通过,调用父类方法弹出文件选择窗口 return super().invoke(context, event) def execute(self, context): # 这里编写实际的导出逻辑,使用self.filepath获取用户选择的路径 print(f"正在导出文件到:{self.filepath}") # 示例:导出选中的FBX文件 bpy.ops.export_scene.fbx( filepath=self.filepath, use_selection=True, apply_scale_options='FBX_SCALE_NONE' ) return {'FINISHED'} # 注册操作 def register(): bpy.utils.register_class(OBJECT_OT_export_model) def unregister(): bpy.utils.unregister_class(OBJECT_OT_export_model) if __name__ == "__main__": register()
关键说明
invoke是Operator的事件入口,ExportHelper的文件选择弹窗在这里触发,所以必须在这里提前做验证- 验证不通过时,用
self.report抛出错误提示,返回{'CANCELLED'}终止操作 - 验证通过后,调用
super().invoke(context, event)触发默认的文件选择窗口 execute方法只负责完成最终的导出动作,此时已经确保验证通过且用户选择了导出路径
内容的提问来源于stack exchange,提问作者user3569465
相关产品推荐
相关产品推荐

