Blender 2.92x

I want to make an N pie menu panel for The Shader Editor.

By the way, what is up with the label miss-match.

The menu reads the Shader Editor, but in BPY the term is NODE_EDITOR.

class TestPanel(bpy.types.Panel):
    bl_label = "Nodes"
    bl_idname = "PT_TestPanel"
    bl_space_type = 'NODE_EDITOR'
    bl_region_type = 'UI'
    bl_category = 'Nodes'
  • $\begingroup$ Shader Editor is a NODE_EDITOR set to work with ShaderNodeTrees. If your panel is to show only in the Shader Editor, then you need to do that check in the poll function (context.space_data.tree_type == 'ShaderNodeTree'). $\endgroup$
    – Secrop
    May 25 at 21:31
  • $\begingroup$ Wow really, So what is the point of "bl_space_type"" my script will make a N panel in 3D View if it's set like bl_space_type = 'VIEW_3D' The API Manual said bl_space_type is "NODE_EDITOR" I would think that all panels would work in any Pain with a N panel $\endgroup$ May 25 at 21:50
  • 2
    $\begingroup$ Your panels are registered to a specific space (no big changes in the API), the difference is that in new versions of blender, the entries in the menu are splitted into different contexts (all types of node systems, uv and image), thought the editores are of the same space_type. Your panel, for example might not be needed for geometry_nodes, but you still have to register it to the Node_Editor, which alone will show in all node types areas. Btw, bl_category is the name in the tab, bl_label will be the title of your panel. $\endgroup$
    – Secrop
    May 26 at 0:17
  • $\begingroup$ Secrop, thanks for the education, It's a lot to take in I've much to learn. Can't find a Shader Editor N Panel script example to study. Thanks again for your Skill and Time. $\endgroup$ May 26 at 15:23
  • $\begingroup$ Is it not working for you? (well i assume that your panel is then all the code that you posted!). $\endgroup$
    – Secrop
    May 26 at 22:02

If your Panel's code is just what you posted, then you're missing some parts of a Panel's requirements.

Here's a small template for 'Shader Editor' to mess around:

import bpy

class SuperSimplePanel(bpy.types.Panel):
    bl_label = "The label of this panel"
    bl_idname = "NODE_PT_ThisSimplePanel" # This is new
    bl_space_type = 'NODE_EDITOR'         # This tells where to show
    bl_region_type = 'UI'
    bl_category = 'OH ANOTHER TAB'     # if it doesn't exist, it will be created

    def poll(cls, context):         # This tells when to show
        return (context.space_data.type == 'NODE_EDITOR' and
                context.space_data.tree_type == 'ShaderNodeTree')

    def draw(self, context):       # This tells what to show
        layout = self.layout
        layout.label("I'm a label in a Panel")

def register():

def unregister():

if __name__ == "__main__":
  • $\begingroup$ Secrop, That was very kind of you to provide this code as well the comments. You can be sure it will teach me much and I will get many lessons from your generosity. $\endgroup$ May 27 at 15:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.