Trouble with unregister function: can't get rid of hotkeys

Hi, guys,

As some of you know, I’ve been working on a pie menu addon to work as a replacement for the default shift+a menu. I’ve come into a problem that I need to take care of before I continue. I can’t get the addon to get rid of the hotkeys correctly.

I’ve tried copying and pasting code to get it to work. This is what the register and unregister currently look like:

def register():
    bpy.utils.register_class(VIEW3D_PIE_Add_Menu)
    bpy.utils.register_class(VIEW3D_PIE_Add_Mesh)
    bpy.utils.register_class(VIEW3D_PIE_Add_Curve)
    bpy.utils.register_class(VIEW3D_PIE_Add_Lamp)
    bpy.utils.register_class(VIEW3D_PIE_Add_Other)
    bpy.utils.register_class(VIEW3D_PIE_Add_Surface)
    bpy.utils.register_class(VIEW3D_PIE_Add_MetaBall)
    bpy.utils.register_class(VIEW3D_PIE_Add_ForceField)
    bpy.utils.register_class(VIEW3D_PIE_Add_MetaBall_pie)
    
    
    #Keymaps
    
    wm = bpy.context.window_manager
    
    km = wm.keyconfigs.addon.keymaps.new(name="Object Mode")
    kmi = km.keymap_items.new("wm.call_menu_pie", "A", "PRESS", shift=True)
    kmi.properties.name="add.menu"
    
    #mesh edit mode
    km = wm.keyconfigs.addon.keymaps.new(name="Mesh")
    kmi = km.keymap_items.new("wm.call_menu_pie", "A", "PRESS", shift=True)
    kmi.properties.name="add.mesh"
    
    #curve edit mode
    km = wm.keyconfigs.addon.keymaps.new(name="Curve")
    kmi = km.keymap_items.new("wm.call_menu_pie", "A", "PRESS", shift=True)
    kmi.properties.name="add.curve"
    
    #mataball edit mode
    km = wm.keyconfigs.addon.keymaps.new(name="Metaball")
    kmi = km.keymap_items.new("wm.call_menu_pie", "A", "PRESS", shift=True)
    kmi.properties.name="add.metaball.pie"
    addon_keymaps.append((km, kmi))


def unregister():
    bpy.utils.unregister_class(VIEW3D_PIE_Add_Menu)
    bpy.utils.unregister_class(VIEW3D_PIE_Add_Mesh)
    bpy.utils.unregister_class(VIEW3D_PIE_Add_Curve)
    bpy.utils.unregister_class(VIEW3D_PIE_Add_Lamp)
    bpy.utils.unregister_class(VIEW3D_PIE_Add_Other)
    bpy.utils.unregister_class(VIEW3D_PIE_Add_Surface)
    bpy.utils.unregister_class(VIEW3D_PIE_Add_MetaBall)
    bpy.utils.unregister_class(VIEW3D_PIE_Add_ForceField)
    bpy.utils.unregister_class(VIEW3D_PIE_Add_MetaBall_pie)
    
    wm = bpy.context.window_manager

    for km, kmi in addon_keymaps:
        km.keymap_items.remove(kmi)
    addon_keymaps.clear()

    # clear the list
    del addon_keymaps[:]

And you can look at the complete addon here.

I got the code I copied and pasted from here.

Thanks in advance!

It seems that you forgot to append km and kmi to addon_keymaps each time you declared a new keymap item…
Only the last one has been appended, so only the last one will unregister :wink:

you can replace all calls to

 bpy.utils.register_class(...)

by a single call to

 bpy.utils.register_module(__name__)

and all calls to

 bpy.utils.unregister_class(...)

by a single call to

 bpy.utils.unregister_module(__name__)