【Blender开发】Blender文件浏览器全攻略

借用官方的类

https://sinestesia.co/blog/tutorials/using-blenders-filebrowser-with-python

class OT_TestOpenFilebrowser(Operator, ImportHelper):
    bl_idname = "test.open_filebrowser1"
    bl_label = "文件浏览器示例1"
    bl_description = "借助于官方的ImportHelper类"

    # 文件筛选
    filter_glob: StringProperty(
        default='*.jpg;*.jpeg;*.png;*.tif;*.tiff;*.bmp',
        options={'HIDDEN'}
    )

    # 在文件选择界面,右侧增加一个参数
    some_boolean: BoolProperty(
        name='对这个参数做点什么吧',
        description='自定义一个值',
        default=True,
    )

    def execute(self, context):
        """ 处理选择的文件(们) """

        filename, extension = os.path.splitext(self.filepath)

        print('选择文件:', self.filepath)
        print('文件名称:', filename)
        print('文件后缀::', extension)
        print('自己的值::', self.some_boolean)

        return {'FINISHED'}

def register():
    bpy.utils.register_class(OT_TestOpenFilebrowser)

def unregister():
    bpy.utils.unregister_class(OT_TestOpenFilebrowser)

自己写

class FileSelectTest(bpy.types.Operator):
    """测试文件选择器"""
    bl_idname = "test.open_filebrowser2"
    bl_label = "文件浏览器示例2"

    # 先定义要调用的值,不然接受不到。

    # 自定义文件筛选参数
    # https://docs.blender.org/api/master/bpy.types.FileSelectParams.html?highlight=filter_glob
    filter_glob: StringProperty(default='*.xls;*.xlsx', options={'HIDDEN'})

    # 接受文件选择信息。fileselect_add()会返回filepath,filename,directory和files集合
    filepath: bpy.props.StringProperty(subtype="FILE_PATH")
    filename: bpy.props.StringProperty(subtype="FILE_NAME")
    directory: bpy.props.StringProperty(
        subtype="DIR_PATH",
        name="Outdir Path",
        description="返回一个文件夹路径"
    )
    files: bpy.props.CollectionProperty(
        name="File Path",
        type=bpy.types.OperatorFileListElement,
    )

    @classmethod
    def poll(cls, context):
        return context.object is not None

    def execute(self, context):
        # 如果选择多个文件,接受到的self.files是个集合,并且只读。所以必须手动处理一下

        files = []
        for file in self.files:
            files.append(file.name)  # OperatorFileListElement就一个name参数好使
        files = [i for i in files]

        print(self.filepath, self.filename, self.directory, files, sep="\n")

        return {'FINISHED'}

    def invoke(self, context, event):
        # https://docs.blender.org/api/current/bpy.types.WindowManager.html#bpy.types.WindowManager.fileselect_add
        context.window_manager.fileselect_add(self)

        return {'RUNNING_MODAL'}
def register():
    bpy.utils.register_class(FileSelectTest)

def unregister():
    bpy.utils.unregister_class(FileSelectTest)

 

 

给TA充电
共{{data.count}}人
人已充电
BlenderBlender开发

【Blender开发】简单示例:生成随机几何体

2022-1-14 8:01:51

BlenderBlender开发

【Blender开发】网格基础2: 立方体与矩阵 | Matrix函数

2022-1-15 9:30:45

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
搜索