Create new menu next to file menu?

Hi all,

I’ve been playing around with python, and I have stumbled upon a problem:
I’m trying to add new menus in the info bar, (next the the file menu) and here’s the code I have

import bpy
from bpy.types import Header, Menu


class test(Menu):
    bl_space_type = 'INFO'
    bl_label = 'testwin'
    
    
    def draw(self, context):
        layout = self.layout()
        
        
        #insert function here
    
       
def register():
    bpy.utils.register_class(test)
    
    
def unregister():
    bpy.utils.unregister_class(test)
    
if __name__ == "__main__":
    register()

It doesn’t give me any errors, nor any new menus, so I’m stumped.

Thanks for all the help!

This is not something simple. You may need to redo the whole Header. And that would be bad for the addons to append or prepend some function in the header “INFO”.

It would be something like this:

import bpyfrom bpy.types import Header, Menu


class test(Menu):
    bl_idname = 'INFO_MT_my_menu'
    bl_label = 'testwin'
    
    def draw(self, context):
        layout = self.layout
        layout.label(text="test:")
        
        #insert function here


class INFO_HT_header(Header):
    bl_space_type = 'INFO'


    def draw(self, context):
        layout = self.layout


        window = context.window
        scene = context.scene
        rd = scene.render


        row = layout.row(align=True)
        row.template_header()


        scene = context.scene
        rd = scene.render


        row.menu("INFO_MT_file")
        
        row.menu("INFO_MT_my_menu")


        if rd.use_game_engine:
            row.menu("INFO_MT_game")
        else:
            row.menu("INFO_MT_render")


        row.menu("INFO_MT_window")
        row.menu("INFO_MT_help")


        if window.screen.show_fullscreen:
            layout.operator("screen.back_to_previous", icon='SCREEN_BACK', text="Back to Previous")
            layout.separator()
        else:
            layout.template_ID(context.window, "screen", new="screen.new", unlink="screen.delete")
            layout.template_ID(context.screen, "scene", new="scene.new", unlink="scene.delete")


        layout.separator()


        if rd.has_multiple_engines:
            layout.prop(rd, "engine", text="")


        layout.separator()


        layout.template_running_jobs()


        layout.template_reports_banner()


        row = layout.row(align=True)


        if bpy.app.autoexec_fail is True and bpy.app.autoexec_fail_quiet is False:
            row.label("Auto-run disabled", icon='ERROR')
            if bpy.data.is_saved:
                props = row.operator("wm.revert_mainfile", icon='SCREEN_BACK', text="Reload Trusted")
                props.use_scripts = True


            row.operator("script.autoexec_warn_clear", text="Ignore")


            # include last so text doesn't push buttons out of the header
            row.label(bpy.app.autoexec_fail_message)
            return


        row.operator("wm.splash", text="", icon='BLENDER', emboss=False)
        row.label(text=scene.statistics(), translate=False)


def register():
    bpy.utils.register_class(test)
    bpy.utils.register_class(INFO_HT_header)
    
def unregister():
    bpy.utils.unregister_class(INFO_HT_header)
    import space_info
    bpy.utils.register_class(space_info.INFO_HT_header)
    bpy.utils.unregister_class(test)
    
if __name__ == "__main__":
    register()

But I do not recommend. Maybe someone has a better idea.