借用官方的类
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)