You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 13:05:26