ClassesTable
Introduction
ClassesTable
widget in Supervisely allows users to display all classes from given project in a table format. The widget shows the class name, geometry type, and the number of images and labels associated with each class. With ClassesTable
widget, users can enable multi-selection mode, restrict the display of certain geometry types, and manage the selected classes. Users can customize the appearance and behavior of the widget to match their project requirements. ClassesTable
widget also allows users to retrieve a list of the selected classes from the code. Overall, the ClassesTable widget is a valuable tool for organizing and managing the classes in Supervisely apps.
Function signature
ClassesTable(
project_meta=None,
project_id=None,
project_fs=None,
allowed_types=None,
selectable=True,
disabled=False,
widget_id=None,
)
Parameters
project_meta
ProjectMeta
Input ProjectMeta
project_id
int
Input Supervisely project ID
project_fs
Project
Input Project
allowed_types
List[Geometry]
Geometry
types that will be display from all types in given project
selectable
bool
Whether the component is selectable
disabled
bool
Whether the component is disabled
widget_id
str
ID of the widget
project_meta
Determine input ProjectMeta
.
type: ProjectMeta
default value: None
meta_json = api.project.get_meta(id=project_id)
meta = sly.ProjectMeta.from_json(data=meta_json)
classes_table = ClassesTable(project_meta=meta)
project_id
Determine input project ID.
type: int
default value: None
classes_table = ClassesTable(project_id=project_id)
project_fs
Determine input Project
, located on local host.
type: Project
default value: None
project_path = "/home/admin/work/supervisely/projects/lemons_annotated"
project = sly.Project(project_path, sly.OpenMode.READ)
classes_table = ClassesTable(project_fs=project)
allowed_types
Determine Geometry
types that will be display from all types in given project.
type: List[Geometry]
default value: None
classes_table = ClassesTable(
project_id=project_id,
allowed_types=[sly.Polygon],
)
selectable
Determine whether the component is selectable.
type: bool
default value: True
classes_table = ClassesTable(
project_id=project_id,
selectable=False,
)
disabled
Determine whether the component is disabled.
type: bool
default value: False
classes_table = ClassesTable(
project_id=project_id,
disabled=True,
)
widget_id
ID of the widget.
type: str
default value: None
Methods and attributes
read_meta(project_meta: sly.ProjectMeta)
Read given ProjectMeta
.
read_project(project_fs: sly.Project)
Read given Project
.
read_project_from_id(project_id: int)
Read given Project
by ID.
get_selected_classes()
Return list of selected classes.
select_classes()
Given classes will be selected (checked) in `ClassesTable``.
clear_selection()
Clear selected data.
value_changed()
Decorator function is handled when input value is changed.
loading(value: bool)
Decorator function is handled when input value is uplouding.
Mini App Example
You can find this example in our Github repository:
ui-widgets-demos/tables/004_classes_table/src/main.py
Import libraries
import os
from dotenv import load_dotenv
import supervisely as sly
from supervisely.app.widgets import Container, ClassesTable, Text, Card
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 ClassesTable
widget by project ID
ClassesTable
widget by project IDproject_id = sly.env.project_id()
class_table = ClassesTable(project_id=project_id)
label = Text("")
Initialize ClassesTable
widget by local project
ClassesTable
widget by local projectdata_dir = sly.app.get_data_dir() # create local directory
if sly.fs.dir_exists(data_dir):
sly.fs.clean_dir(data_dir) # clean directory
project_dir = os.path.join(data_dir, "sly_project")
sly.Project.download(api, project_id, project_dir)
project = sly.Project(project_dir, sly.OpenMode.READ)
local_class_table = ClassesTable(project_fs=project)
local_label = 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.
card = Card(
title="Classes Table",
content=Container([class_table, label], gap=5),
)
card_local = Card(
title="Classes Table Local",
content=Container([local_class_table, local_label], gap=5),
)
layout = Container(widgets=[card, card_local])
Create app using layout
Create an app object with layout parameter.
app = sly.Application(layout=layout)
Handle ClassesTable clicks
Use the decorator as shown below to handle ClassesTable
clicks.
@class_table.value_changed
def class_table_value_changed(selected_classes):
label.text = f"Selected classes: {', '.join(selected_classes)}"
@local_class_table.value_changed
def class_table_value_changed(selected_classes):
local_label.text = f"Selected classes: {', '.join(selected_classes)}"
Last updated
Was this helpful?