Skip to content

Errors with "controls" argument of @interact #579

Description

@Keanel-19

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions