Cleanup: some variables had unused naming but were used
[blender.git] / doc / python_api / examples / bpy.types.Operator.2.py
1 """
2 Calling a File Selector
3 +++++++++++++++++++++++
4 This example shows how an operator can use the file selector.
5
6 Notice the invoke function calls a window manager method and returns
7 ``{'RUNNING_MODAL'}``, this means the file selector stays open and the operator does not
8 exit immediately after invoke finishes.
9
10 The file selector runs the operator, calling :class:`Operator.execute` when the
11 user confirms.
12
13 The :class:`Operator.poll` function is optional, used to check if the operator
14 can run.
15 """
16 import bpy
17
18
19 class ExportSomeData(bpy.types.Operator):
20     """Test exporter which just writes hello world"""
21     bl_idname = "export.some_data"
22     bl_label = "Export Some Data"
23
24     filepath: bpy.props.StringProperty(subtype="FILE_PATH")
25
26     @classmethod
27     def poll(cls, context):
28         return context.object is not None
29
30     def execute(self, context):
31         file = open(self.filepath, 'w')
32         file.write("Hello World " + context.object.name)
33         return {'FINISHED'}
34
35     def invoke(self, context, event):
36         context.window_manager.fileselect_add(self)
37         return {'RUNNING_MODAL'}
38
39
40 # Only needed if you want to add into a dynamic menu
41 def menu_func(self, context):
42     self.layout.operator_context = 'INVOKE_DEFAULT'
43     self.layout.operator(ExportSomeData.bl_idname, text="Text Export Operator")
44
45
46 # Register and add to the file selector
47 bpy.utils.register_class(ExportSomeData)
48 bpy.types.TOPBAR_MT_file_export.append(menu_func)
49
50
51 # test call
52 bpy.ops.export.some_data('INVOKE_DEFAULT')