sagecell
sagecell copied to clipboard
Errors with "controls" argument of @interact
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
For now I just do this:
@interact(controls=[("b",Button("AA"))])
def f(proxy,**kargs):
if getattr(proxy,"kargs"):
del proxy.kargs
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?
I discovered it by following the docstrings in the source file of interacts. I didn't find a better doc.