1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- # This sample script demonstrates how to place a custom icon on a button or
- # menu entry.
- #
- # IMPORTANT NOTE: if you run this sample, there will be no icon in the button
- # You need to replace the image path with a real existing one.
- # For distributable scripts, it is recommended to place the icons inside the
- # addon folder and access it relative to the py script file for portability
- #
- #
- # Other use cases for UI-previews:
- # - provide a fixed list of previews to select from
- # - provide a dynamic list of preview (eg. calculated from reading a directory)
- #
- # For the above use cases, see the template 'ui_previews_dynamic_enum.py"
- import os
- import bpy
- class PreviewsExamplePanel(bpy.types.Panel):
- """Creates a Panel in the Object properties window"""
- bl_label = "Previews Example Panel"
- bl_idname = "OBJECT_PT_previews"
- bl_space_type = 'PROPERTIES'
- bl_region_type = 'WINDOW'
- bl_context = "object"
- def draw(self, context):
- layout = self.layout
- pcoll = preview_collections["main"]
- row = layout.row()
- my_icon = pcoll["my_icon"]
- row.operator("render.render", icon_value=my_icon.icon_id)
- # my_icon.icon_id can be used in any UI function that accepts
- # icon_value # try also setting text=""
- # to get an icon only operator button
- # We can store multiple preview collections here,
- # however in this example we only store "main"
- preview_collections = {}
- def register():
- # Note that preview collections returned by bpy.utils.previews
- # are regular py objects - you can use them to store custom data.
- import bpy.utils.previews
- pcoll = bpy.utils.previews.new()
- # path to the folder where the icon is
- # the path is calculated relative to this py file inside the addon folder
- my_icons_dir = os.path.join(os.path.dirname(__file__), "icons")
- # load a preview thumbnail of a file and store in the previews collection
- pcoll.load("my_icon", os.path.join(my_icons_dir, "icon-image.png"), 'IMAGE')
- preview_collections["main"] = pcoll
- bpy.utils.register_class(PreviewsExamplePanel)
- def unregister():
- for pcoll in preview_collections.values():
- bpy.utils.previews.remove(pcoll)
- preview_collections.clear()
- bpy.utils.unregister_class(PreviewsExamplePanel)
- if __name__ == "__main__":
- register()
|