Introduction
ObjectClassesList
is a widget that allows users to view a list of all given object classes. The widget provides a flexible display option with a choice of single-column or multiple-column layouts. It also allows users to select or deselect one or more classes, making it easy to manage and organize object classes. This widget is a useful tool for visualizing and selecting classes in Supervisely.
Function signature
Copy obj_classes_list = ObjectClassesList(
object_classes=project_meta.obj_classes,
selectable=False,
columns=1,
widget_id=None
)
Parameters
Parameters
Type
Description
Union[ObjClassCollection, List[ObjClass]]
Supervisely object class collection or list of object classes
object_classes
Supervisely object class collection (ObjClassCollection
) or list of ObjClass
.
type: Union[ObjClassCollection, List[ObjClass]]
Copy obj_classes_list = ObjectClassesList(
object_classes=project_meta.obj_classes
)
selectable
Enable classes selection.
type: bool
default False
Copy obj_classes_list = ObjectClassesList(
object_classes=project_meta.obj_classes,
selectable=True
)
columns
Number of columns.
type: int
default 1
Copy obj_classes_list = ObjectClassesList(
object_classes=project_meta.obj_classes,
columns=2
)
widget_id
ID of the widget.
type: str
default value: None
Methods and attributes
Attributes and Methods
Description
Return list of selected classes.
Mini App Example
You can find this example in our Github repository:
supervisely-ecosystem/ui-widgets-demos/media/010_object_classes_list/src/main.py
Import libraries
Copy import os
from random import randint
import supervisely as sly
from dotenv import load_dotenv
from supervisely.app.widgets import Button, Card, Container
from supervisely.app.widgets import Image, ObjectClassesList, ProjectThumbnail
Init API client
First, we load environment variables with credentials and init API for communicating with Supervisely Instance:
Copy load_dotenv("local.env")
load_dotenv(os.path.expanduser("~/supervisely.env"))
api = sly.Api()
Initialize Project ID
and Dataset ID
we will use
Copy project_id = sly.env.project_id()
dataset_id = sly.env.dataset_id()
Get Project info and meta
Copy project_info = api.project.get_info_by_id(id=project_id)
project_meta = sly.ProjectMeta.from_json(api.project.get_meta(project_id))
Initialize ObjectClassesList
widget
Copy obj_classes_list = ObjectClassesList(
object_classes=project_meta.obj_classes,
selectable=True,
columns=3,
)
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.
Copy project_thumbnail = ProjectThumbnail(project_info)
cls_select_btn = Button(text="PREVIEW")
select_class_container = Container(widgets=[obj_classes_list, cls_select_btn])
image = Image()
preview_container = Container(
widgets=[select_class_container, image],
direction="horizontal",
fractions=[2, 1],
)
card = Card(
title="Object Classes List",
content=Container(widgets=[project_thumbnail, preview_container]),
)
layout = Container(widgets=[card])
Create app using layout
Create an app object with layout parameter.
Copy app = sly.Application(layout=layout)
Add functions to control widgets from python code
Copy @cls_select_btn.click
def show_info():
classes = obj_classes_list.get_selected_classes()
obj_classes = api.object_class.get_list(
project_id=project_id, filters=[{"field": "name", "operator": "in", "value": classes}]
)
imgs = api.image.get_filtered_list(
dataset_id=dataset_id,
filters=[{"type": "objects_class", "data": {"classId": obj.id}} for obj in obj_classes],
)
if len(imgs) == 0:
image.clean_up()
return
index = randint(0, len(imgs) - 1)
image.set(imgs[index].full_storage_url)