I'm working on a part of my plugin easyText. (http://ranincodes.wix.com/easytext)

I want the import Font part to automaticly check if the Font is already imported. How do I get the name of the selected file (=filebuff)? If it is, the font should not be imported

This is the part of the code wich is important for it

atr = bpy.types.Scene
atr.font = StringProperty(name = "Text Font", description = "Font of the Text")
atr.filebuff = StringProperty(name = "", description = "Choose Font to Import", subtype="FILE_PATH")

class windowFont (bpy.types.Panel):
    bl_space_type = "VIEW_3D"
    bl_region_type = "TOOLS"
    bl_label = "Import Font"
    bl_category = "easyText"

    def draw(self, context):
        scene = bpy.context.scene
        layout = self.layout
        layout.label("Choose + Import Font")
        col = layout.column(align = True)
        layout.prop(scene, "filebuff")
        layout.operator("load.font", text="Import", icon="LOAD_FACTORY")

class OBJECT_OT_buttonLoad(bpy.types.Operator):
    bl_label = "Load Font"
    bl_idname = "load.font"
    bl_description = "Import the choosen Font"

    def execute(self, context):
        scene = bpy.context.scene
        fontb = scene.filebuff
        bpy.ops.font.open(filepath=fontb, relative_path=False)

UI:enter image description here

Thank you!


1 Answer 1


Instead of using the bpy.fonts.open(... operator you can use the load() command for Font Datablocks which has a check_existing property built in, which should do exactly what you want:

bpy.data.fonts.load(filepath=fontb, check_existing=True)

When check_existing is set to True if a font datablock already exists in the blend file from that path then it won't be loaded, otherwise it will.

For more information on why it is generally better avoid bpy.ops commands read here:

Why avoid bpy.ops?


You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .