This is a guide on how to set up debugging in a Blender Add-on version 2.80 or higher using PyCharm.
I used this guide: https://code.blender.org/2015/10/debugging-python-code-with-pycharm/
to set up debugging.
Important: You need Pycharm Professional for debugging Blender because it requires the remote debugging feature which isn't available in community edition in 2019 or lower.
Debugging a Blender Add-on in PyCharm
Create a Blender Add-on project with PyCharm
We'll be setting up a fresh Blender Add-on project with PyCharm that works with source control. This guide was written for Blender 2.80 but it works the same in later versions as of May 2024.
I have made a boilerplate template for Blender 4.x, 3.x that you can copy and use as a base. https://github.com/saaratrix/empty-blender-add-on-template .
How to add user preferences for a Blender Add-on
When trying to implement user preferences for a 2.80 Blender add-on the official documentation was confusing for me and it didn't work with their example code.
Their comment on what to set bl_idname
as was the confusing part.
Probably because of my Python inexperience.
https://docs.blender.org/api/current/bpy.types.AddonPreferences.html
After some searching I found this article that helped me understand what I had done wrong and make it work.
https://b3d.interplanety.org/en/add-on-preferences-panel/
Example code with preferences in own file
The code to get add-on preferences in Blender 2.80 in its own file was this code below.
bl_idname
should be __name__
if the class is inside __init__.py
otherwise __package__
.
import bpy
class EXAMPLE_addonPreferences(bpy.types.AddonPreferences):
bl_idname = __package__
# Code below copied from https://b3d.interplanety.org/en/add-on-preferences-panel/
add_bevel: bpy.props.EnumProperty(
items=[
('bevel', 'Add bevel', '', '', 0),
('no_bevel', 'No bevel', '', '', 1)
],
default='no_bevel'
)
def draw(self, context):
layout = self.layout
layout.label(text='Add bevel modifier:')
row = layout.row()
row.prop(self, 'add_bevel', expand=True)
Here is an image of the add-on preferences UI from the code above.
Reload modified 2.80 Blender Add-on
I started working on my first Blender add-on for 2.80 and quickly wondered: how do I reload my blender add-on without restarting Blender!? After spending roughly a day researching on how to reload I was able to just hit a key (F8) inside Blender to reload the add-on.
After searching and testing on different approaches for reloading I came across this post: https://developer.blender.org/T67387 . I had gone through many of their steps in trying to figure out how to reload the add-ons :).
The solution:
Two steps are required to easily reload the add-on.
One is setting up the reload key binding because reload scripts action is unbound.
The other one is writing the proper reload code in the __init__.py
file.