Supervisely
About SuperviselyEcosystemContact usSlack
  • 💻Supervisely Developer Portal
  • 🎉Getting Started
    • Installation
    • Basics of authentication
    • Intro to Python SDK
    • Environment variables
    • Supervisely annotation format
      • Project Structure
      • Project Meta: Classes, Tags, Settings
      • Objects
      • Tags
      • Image Annotation
      • Video Annotation
      • Point Clouds Annotation
      • Point Cloud Episode Annotation
      • Volumes Annotation
    • Python SDK tutorials
      • Images
        • Images
        • Image and object tags
        • Spatial labels on images
        • Keypoints (skeletons)
        • Multispectral images
        • Multiview images
        • Advanced: Optimized Import
        • Advanced: Export
      • Videos
        • Videos
        • Video and object tags
        • Spatial labels on videos
      • Point Clouds
        • Point Clouds (LiDAR)
        • Point Cloud Episodes and object tags
        • 3D point cloud object segmentation based on sensor fusion and 2D mask guidance
        • 3D segmentation masks projection on 2D photo context image
      • Volumes
        • Volumes (DICOM)
        • Spatial labels on volumes
      • Common
        • Iterate over a project
        • Iterate over a local project
        • Progress Bar tqdm
        • Cloning projects for development
    • Command Line Interface (CLI)
      • Enterprise CLI Tool
        • Instance administration
        • Workflow automation
      • Supervisely SDK CLI
    • Connect your computer
      • Linux
      • Windows WSL
      • Troubleshooting
  • 🔥App development
    • Basics
      • Create app from any py-script
      • Configuration file
        • config.json
        • Example 1. Headless
        • Example 2. App with GUI
        • v1 - Legacy
          • Example 1. v1 Modal Window
          • Example 2. v1 app with GUI
      • Add private app
      • Add public app
      • App Compatibility
    • Apps with GUI
      • Hello World!
      • App in the Image Labeling Tool
      • App in the Video Labeling Tool
      • In-browser app in the Labeling Tool
    • Custom import app
      • Overview
      • From template - simple
      • From scratch - simple
      • From scratch GUI - advanced
      • Finding directories with specific markers
    • Custom export app
      • Overview
      • From template - simple
      • From scratch - advanced
    • Neural Network integration
      • Overview
      • Serving App
        • Introduction
        • Instance segmentation
        • Object detection
        • Semantic segmentation
        • Pose estimation
        • Point tracking
        • Object tracking
        • Mask tracking
        • Image matting
        • How to customize model inference
        • Example: Custom model inference with probability maps
      • Serving App with GUI
        • Introduction
        • How to use default GUI template
        • Default GUI template customization
        • How to create custom user interface
      • Inference API
      • Training App
        • Overview
        • Tensorboard template
        • Object detection
      • High level scheme
      • Custom inference pipeline
      • Train and predict automation model pipeline
    • Advanced
      • Advanced debugging
      • How to make your own widget
      • Tutorial - App Engine v1
        • Chapter 1 Headless
          • Part 1 — Hello world! [From your Python script to Supervisely APP]
          • Part 2 — Errors handling [Catching all bugs]
          • Part 3 — Site Packages [Customize your app]
          • Part 4 — SDK Preview [Lemons counter app]
          • Part 5 — Integrate custom tracker into Videos Annotator tool [OpenCV Tracker]
        • Chapter 2 Modal Window
          • Part 1 — Modal window [What is it?]
          • Part 2 — States and Widgets [Customize modal window]
        • Chapter 3 UI
          • Part 1 — While True Script [It's all what you need]
          • Part 2 — UI Rendering [Simplest UI Application]
          • Part 3 — APP Handlers [Handle Events and Errors]
          • Part 4 — State and Data [Mutable Fields]
          • Part 5 — Styling your app [Customizing the UI]
        • Chapter 4 Additionals
          • Part 1 — Remote Developing with PyCharm [Docker SSH Server]
      • Custom Configuration
        • Fixing SSL Certificate Errors in Supervisely
        • Fixing 400 HTTP errors when using HTTP instead of HTTPS
      • Autostart
      • Coordinate System
      • MLOps Workflow integration
    • Widgets
      • Input
        • Input
        • InputNumber
        • InputTag
        • BindedInputNumber
        • DatePicker
        • DateTimePicker
        • ColorPicker
        • TimePicker
        • ClassesMapping
        • ClassesColorMapping
      • Controls
        • Button
        • Checkbox
        • RadioGroup
        • Switch
        • Slider
        • TrainValSplits
        • FileStorageUpload
        • Timeline
        • Pagination
      • Text Elements
        • Text
        • TextArea
        • Editor
        • Copy to Clipboard
        • Markdown
        • Tooltip
        • ElementTag
        • ElementTagsList
      • Media
        • Image
        • LabeledImage
        • GridGallery
        • Video
        • VideoPlayer
        • ImagePairSequence
        • Icons
        • ObjectClassView
        • ObjectClassesList
        • ImageSlider
        • Carousel
        • TagMetaView
        • TagMetasList
        • ImageAnnotationPreview
        • ClassesMappingPreview
        • ClassesListPreview
        • TagsListPreview
        • MembersListPreview
      • Selection
        • Select
        • SelectTeam
        • SelectWorkspace
        • SelectProject
        • SelectDataset
        • SelectItem
        • SelectTagMeta
        • SelectAppSession
        • SelectString
        • Transfer
        • DestinationProject
        • TeamFilesSelector
        • FileViewer
        • Dropdown
        • Cascader
        • ClassesListSelector
        • TagsListSelector
        • MembersListSelector
        • TreeSelect
        • SelectCudaDevice
      • Thumbnails
        • ProjectThumbnail
        • DatasetThumbnail
        • VideoThumbnail
        • FolderThumbnail
        • FileThumbnail
      • Status Elements
        • Progress
        • NotificationBox
        • DoneLabel
        • DialogMessage
        • TaskLogs
        • Badge
        • ModelInfo
        • Rate
        • CircleProgress
      • Layouts and Containers
        • Card
        • Container
        • Empty
        • Field
        • Flexbox
        • Grid
        • Menu
        • OneOf
        • Sidebar
        • Stepper
        • RadioTabs
        • Tabs
        • TabsDynamic
        • ReloadableArea
        • Collapse
        • Dialog
        • IFrame
      • Tables
        • Table
        • ClassicTable
        • RadioTable
        • ClassesTable
        • RandomSplitsTable
        • FastTable
      • Charts and Plots
        • LineChart
        • GridChart
        • HeatmapChart
        • ApexChart
        • ConfusionMatrix
        • LinePlot
        • GridPlot
        • ScatterChart
        • TreemapChart
        • PieChart
      • Compare Data
        • MatchDatasets
        • MatchTagMetas
        • MatchObjClasses
        • ClassBalance
        • CompareAnnotations
      • Widgets demos on github
  • 😎Advanced user guide
    • Objects binding
    • Automate with Python SDK & API
      • Start and stop app
      • User management
      • Labeling Jobs
  • 🖥️UI widgets
    • Element UI library
    • Supervisely UI widgets
    • Apexcharts - modern & interactive charts
    • Plotly graphing library
  • 📚API References
    • REST API Reference
    • Python SDK Reference
Powered by GitBook
On this page
  • Introduction
  • Function signature
  • Parameters
  • data
  • columns
  • fixed_cols
  • per_page
  • page_sizes
  • sort_column_id
  • sort_direction
  • widget_id
  • Methods and attributes
  • Mini App Example
  • Import libraries
  • Init API client
  • Prepare function that creates example pandas table
  • Initialize Table widget
  • Create app layout
  • Create app using layout
  • Add functions to control widget from python code

Was this helpful?

Edit on GitHub
  1. App development
  2. Widgets
  3. Tables

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

Parameters
Type
Description

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:

  1. Pandas Dataframe:

pd.DataFrame(data=data, columns=columns)
  1. 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

Attributes and Methods
Description

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:

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 = 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)
PreviousTablesNextClassicTable

Last updated 1 year ago

Was this helpful?

🔥
ui-widgets-demos/tables/001_table/src/main.py