sagecell icon indicating copy to clipboard operation
sagecell copied to clipboard

Errors with "controls" argument of @interact

Open Keanel-19 opened this issue 1 year ago • 2 comments

There is multiple errors with the controls argument of @interact.

To use it, the decorated function must have a **kargs argument so it can pass the controls.

@interact(controls=[("b",Button("a"))])
def f(**kargs):
    pass

This code throw an error because it try to pass the proxy to kargs, because it's the first argument of f and doesn't have a default value. But in this case f doesn't take any positional argument :

TypeError: f() takes 0 positional arguments but 1 was given

I can resolve it by adding any argument before **kargs (any control or an argument for the proxy):

@interact(controls=[("b",Button("a"))])
def f(proxy, **kargs):
    pass

In this case, it doesn't throw any error but sagecell add an input control with label kargs image

For now I just do this:

@interact(controls=[("b",Button("AA"))])
def f(proxy,**kargs):
    if getattr(proxy,"kargs"):
        del proxy.kargs

Keanel-19 avatar Dec 21 '23 14:12 Keanel-19

To clarify - is this new behaviour, i.e. things were working for you before, but got broken now, or have you just discovered it? What API are you trying to follow?

novoselt avatar Dec 21 '23 17:12 novoselt

I discovered it by following the docstrings in the source file of interacts. I didn't find a better doc.

Keanel-19 avatar Dec 21 '23 20:12 Keanel-19