I already learned that you can't and don't need to overload in Python, but I didn't know how to call it otherwise.

(all pseudo code)

I have a button:

myBox = layout.box()
myBox.operator(my_Button.bl_idname, text = "Move it") 

And want to add a non-obligatory parameter to the execute method:

class my_Button(bpy.types.Operator):
   bl_idname = "object.my_button"
   def execute(self, context, calledByButton=True):   

So I can call the method by using the button, or somewhere in the script:


But I get an error on registering it (strangly for the next class)

ValueError: expected Operator, my_NextButton class "execute" function to have 2 args , found 3

How would I do that correctly?


1 Answer 1


You do this correctly like this:

import bpy

class MyButton(bpy.types.Operator):
    bl_idname = "object.my_button"
    bl_label = "My Button"
    flag = bpy.props.BoolProperty(default=True)

    def execute(self, context):
        if self.flag:
            print('Called by button')
            print('Not called by button')


 myBox.operator("object.my_button").flag = True
  • $\begingroup$ While this seemed correct at first, I don't seem to be able to do this: bpy.ops.object.my_button.flag = True, because the class isn't initialized and of course I'd run bpy.ops.object.my_button() afterwards to have the flag set at runtime. $\endgroup$
    – bortran
    Jan 28, 2015 at 14:47
  • $\begingroup$ You need to call bpy.ops.object.my_button(flag=False), I will add that. Also the class should have bl_label $\endgroup$ Jan 28, 2015 at 15:18

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .