InputTag

Introduction

InputTag widget in Supervisely is a user interface element that allows users to add or remove tag labels to items (images, videos, volumes, and point clouds). It uses TagMeta of the current project and allow to use them easily in Supervisely apps. InputTag widget is a valuable tool for improving the organization and efficiency of Supervisely apps.

Function signature

InputTag(
    tag_meta,
    max_width=300,
    widget_id=None,
)

Parameters

ParametersTypeDescription

tag_meta

TagMeta

TagMeta from which Tags will be selected

max_width

int

Max tag field width

widget_id

str

ID of the widget

tag_meta

Determine TagMeta from which Tags will be selected. Possible Tag types: any_number, any_string, one_of_string, none.

type: TagMeta

max_width

Determine max tag field width.

type: int

default value: 300

tag_inputs = [InputTag(t, max_width=800) for t in tag_metas]

widget_id

ID of the widget.

type: str

default value: None

Methods and attributes

Attributes and MethodsDescription

value

Get input widget value property.

value(value: tag.value)

Set input widget value property.

get_tag_meta()

Return current TagMeta.

set_tag_meta()

set TagMeta.

activate()

Activate InputTag switch.

deactivate()

Deactivate InputTag switch.

is_active()

Check InputTag switch is active.

is_valid_value(value: tag.value)

Check InputTag current value is valid.

set(tag: Union[Tag, None])

Set given value in InputTag.

get_tag()

Get current Tag from InputTag.

@selection_changed

Decorator function is handled when InputTag selection is changed.

@value_changed

Decorator function is handled when InputTag value is changed.

Mini App Example

You can find this example in our Github repository:

ui-widgets-demos/input/003_input_tag/src/main.py

Import libraries

import os

import supervisely as sly
from dotenv import load_dotenv
from supervisely.app.widgets import Button, Card, Container, InputTag, Text

Init API client

First, we load environment variables with credentials and init API for communicating with Supervisely Instance:

load_dotenv("local.env")
load_dotenv(os.path.expanduser("~/supervisely.env"))

api = sly.Api()

Initialize Project ID and TagMeta we will use

project_id = sly.env.project_id()

meta_json = api.project.get_meta(project_id)
project_meta = sly.ProjectMeta.from_json(meta_json)
tag_metas = project_meta.tag_metas

Initialize list of InputTag widgets for each TagMeta in project

tag_inputs = [InputTag(t) for t in tag_metas]

Initialize Button and Text widgets we will use

toggle_btn = Button("Toggle")
value_text = Text()

Create app layout

Prepare a layout for app using Card widget with the content parameter and place widget that we've just created in the Container widget.

tag_inputs_container = Container(widgets=tag_inputs)
container = Container(widgets=[tag_inputs_container, toggle_btn, value_text])
card = Card(title="Tag inputs", content=container)
layout = Container(widgets=[card])

Create app using layout

Create an app object with layout parameter.

app = sly.Application(layout=layout)

Handle button clicks

Use the decorators to handle button click and tag values changing. We have button to change tags switch status and text field to show tags values changing.

for tag_input in tag_inputs:

    @tag_input.value_changed
    def show_message(value):
        value_text.text = value


@toggle_btn.click
def toggle_tag_inputs():
    for tag_input in tag_inputs:
        if tag_input.is_active():
            tag_input.deactivate()
        else:
            tag_input.activate()

Last updated