Comment ajouter un bouton à l'en-tête Outliner via un script python?

Sep 29 2020

Est-il possible d'ajouter un bouton via python ici?

Réponses

3 RobertGützkow Sep 29 2020 at 04:52

L'en-tête du panneau Outliner est accessible via bpy.types.OUTLINER_HT_header. Il est possible d'ajouter des boutons supplémentaires à l'en-tête en ajoutant ou en ajoutant au début une fonction de dessin qui affecte les opérateurs appropriés à la mise en page. La fonction draw pourrait ressembler à ce qui suit, si votre classe d'opérateur est appelée EXAMPLE_OT_something.

def draw(self, context):
        self.layout.operator(EXAMPLE_OT_something.bl_idname)

Si l'opérateur a été enregistré, la fonction de dessin peut être ajoutée à l'en-tête. Cela place le bouton à la fin de l'en-tête. Utiliser le .prependplacerait au début .

bpy.types.OUTLINER_HT_header.append(draw)

Vous trouverez ci-dessous un exemple de module complémentaire illustrant le concept.

bl_info = {
    "name": "Outliner Header Button",
    "author": "Robert Guetzkow",
    "version": (1, 0, 0),
    "blender": (2, 81, 0),
    "location": "Outliner",
    "description": "Adds an example button to the outliner header.",
    "wiki_url": "",
    "category": "Outliner"}

import bpy


class EXAMPLE_OT_something(bpy.types.Operator):
    bl_idname = "example.something"
    bl_label = "Do something"
    bl_description = "This operator does something"
    bl_options = {"REGISTER"}

    def execute(self, context):
        print("Hello")
        return {"FINISHED"}


def draw(self, context):
    self.layout.operator(EXAMPLE_OT_something.bl_idname)


classes = (EXAMPLE_OT_something,)


def register():
    for cls in classes:
        bpy.utils.register_class(cls)
        
    bpy.types.OUTLINER_HT_header.append(draw)


def unregister():
    bpy.types.OUTLINER_HT_header.remove(draw)
    
    for cls in classes:
        bpy.utils.unregister_class(cls)


if __name__ == "__main__":
    register()