Table
Introduction
Table
widget in Supervisely allows for displaying and manipulating data in a table format.
It supports data in the Pandas DataFrame format or a Python dictionary with a specific structure.
The Table
widget allows searching, sorting by column and direction, and the ability to download or customize data before downloading. It also allows for the creation of buttons in table cells and updating table data in real-time through Python code.
Function signature
table = Table()
table.read_pandas(pd.DataFrame(data=data, index=b, columns=a))
or
table = Table(
data=pd.DataFrame(data=data, index=b, columns=a),
fixed_cols=1,
per_page=10,
page_sizes=[10, 15, 30, 50, 100],
width="auto",
sort_column_id=1,
sort_direction="asc",
widget_id=None
)

Parameters
data
pd.DataFrame()
or dict
Data of table
columns
Optional[list]
List of columns names
fixed_cols
Optional[int]
Number of fixed columns (left to right)
per_page
Optional[int]
Default per page value
page_sizes
Optional[List[int]]
Page sizes presets
width
Optional[str]
Width of table
sort_column_id
int
Column ID by which the table will be sorted
sort_direction
Optional[Literal["asc", "desc"]]
Table sorting direction
widget_id
str
ID of the widget
data
Data of table in different formats:
Pandas Dataframe:
pd.DataFrame(data=data, columns=columns)
Python dict with structure:
{
"columns": ["col_name_1", "col_name_2", ...],
"data": [
["row_1_column_1", "row_1_column_2", ...],
["row_2_column_1", "row_2_column_2", ...],
...
]
}
# prepare data for table
a = list(range(1, 11))
b = list(range(1, 5))
data = []
for row in b:
temp = [round(row * number, 1) for number in a]
data.append(temp)
a = [str(i) for i in a]
b = [str(i) for i in b]
data = pd.DataFrame(data=data, index=b, columns=a)
table = Table(data=df)
columns
List of columns names.
type: Optional[list]
default value: None
columns = [f"Col#{i}" for i in range(1, 11)]
data = pd.DataFrame(data=data, index=b, columns=columns)
table = Table(data=df)

fixed_cols
Number of fixed colums (left to right).
type: Optional[int]
default value: None
table = Table(data=df, fixed_cols=2)
per_page
Default per page value.
type: Optional[int]
default value: 10
table = Table(data=df, per_page=4)

page_sizes
Page sizes presets.
type: Optional[List[int]]
default value: [10, 15, 30, 50, 100]
width
Width of table.
type: Optional[str]
default value: auto
table = Table(data=df, width="200px")
sort_column_id
Column ID by which the table will be sorted.
type: int
default value: 0
table = Table(data=df, sort_column_id=2)
sort_direction
Table sorting direction.
type: Optional[Literal["asc", "desc"]]
default value: asc
table = Table(data=df, sort_direction="desc")
widget_id
ID of the widget.
type: str
default value: None
Methods and attributes
fixed_columns_num
Get or set number of fixed columns (left to right) property.
summary_row
Get or set summary row data property.
to_json()
Convert table data to JSON format.
to_pandas()
Convert table data to pandas DataFrame
.
read_json(value: dict)
Read and set table data from JSON format.
read_pandas(value: pd.DataFrame)
Read and set table data from pandas DataFrame
.
insert_row(data, index=-1)
Insert new row in table by index.
pop_row(index=-1)
Remove row from table by index.
get_selected_cell(state)
Get selected table cell info.
get_html_text_as_button(title: str = "preview")
Static method to get HTML code for button with given title.
create_button(title: str = "preview")
Static method to get HTML code for button with given title.
loading
Get or set table loading status property.
clear_selection()
Deselect a table cell.
delete_row(key_column_name: str, key_cell_value: str)
Delete row by column name and cell value.
update_cell_value(key_column_name: str, key_cell_value: str, column_name: str, new_value: str)
Update single cell value by column name and cell value.
update_matching_cells(key_column_name: str, key_cell_value: str, column_name: str, new_value: str)
Update all matching cells values by column name and cell value.
sort(column_id: int, direction: Optional[Literal["asc", "desc"]])
Sort table rows by given column ID and/or order direction.
@download_as_csv
Decorator function is handled when "download as csv" button is pressed.
@click
Decorator function is handled when table cell is pressed.
Mini App Example
You can find this example in our Github repository:
ui-widgets-demos/tables/001_table/src/main.py
Import libraries
import os
import pandas as pd
import supervisely as sly
from dotenv import load_dotenv
from supervisely.app.widgets import Card, Container, Table
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()
Prepare function that creates example pandas table
def multiplication_table():
a = list(range(1, 11))
b = list(range(1, 6))
data = []
for row in b:
temp = [round(row * number, 1) for number in a]
temp[-1] = sly.app.widgets.Table.create_button("Delete row")
data.append(temp)
a = [f"Col#{str(i)}" for i in a]
b = [str(i) for i in b]
return pd.DataFrame(data=data, index=b, columns=a)
Create data for table.
df = multiplication_table()
Initialize Table
widget
Table
widgettable = Table(data=df)
or you can initialize empty table and set data later.
table = Table()
table.read_pandas(df)
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="Table",
content=table,
)
layout = Container(widgets=[card])
Create app using layout
Create an app object with layout parameter.
app = sly.Application(layout=layout)
Add functions to control widget from python code
@table.download_as_csv
def download_as_csv():
df = table.to_pandas()
df = df.drop(index=[0, 1, 2])
return df
@table.click
def handle_table_button(datapoint: sly.app.widgets.Table.ClickedDataPoint):
if datapoint.button_name is None:
return
row_num = datapoint.row["Col#1"]
if datapoint.button_name == "Delete row":
table.delete_row("Col#1", row_num)

Last updated
Was this helpful?