All Projects → patarapolw → pyhandsontable

patarapolw / pyhandsontable

Licence: MIT License
View a list of JSON-serializable dictionaries or a 2-D array, in HandsOnTable, in Jupyter Notebook.

Programming Languages

python
139335 projects - #7 most used programming language
javascript
184084 projects - #8 most used programming language
HTML
75241 projects

Projects that are alternatives of or similar to pyhandsontable

docs
API Documentation for Handsontable
Stars: ✭ 18 (+63.64%)
Mutual labels:  handsontable
edittable
Plugin to provide a custom editor for tables in DokuWiki
Stars: ✭ 29 (+163.64%)
Mutual labels:  handsontable
pyexcel-handsontable
A pyexcel plugin to render data as handsontable in html pages
Stars: ✭ 22 (+100%)
Mutual labels:  handsontable
django-funky-sheets
Django implementation of Handsontable spreadsheets for CRUD actions.
Stars: ✭ 91 (+727.27%)
Mutual labels:  handsontable
MPContribs
Platform for materials scientists to contribute and disseminate their materials data through Materials Project
Stars: ✭ 30 (+172.73%)
Mutual labels:  handsontable

pyhandsontable

Build Status PyPI version shields.io PyPI license PyPI pyversions

View a list of JSON-serializable dictionaries or a 2-D array, in HandsOnTable, in Jupyter Notebook.

Nested JSON renderer is also supported and is default. Image and markdown renderers are possible, but has to be extended.

Installation

pip install pyhandsontable

Usage

In Jupyter Notebook,

>>> from pyhandsontable import PagedViewer
>>> viewer = PagedViewer(data=data_matrix, **kwargs)
>>> viewer
'A Handsontable is shown in Jupyter Notebook.'
>>> viewer.view(-1)
'The last page is shown.'
>>> viewer.previous()
'The previous page (i-1) is shown.'
>>> viewer.next()
'The next page (i+1) is shown.'

Data matrix can be either a list of lists (2-D array) or a list of dictionaries.

It is also possible to view all entries at once, but it could be bad, if there are too many rows.

>>> from pyhandsontable import view_table
>>> view_table(data_matrix, **kwargs)

Acceptable kwargs

  • height: height of the window (default: 500)
  • width: width of the window (default: 1000)
  • title: title of the HTML file
  • maxColWidth: maximum column width. (Default: 200)
  • renderers: the renderers to use in generating the columns (see below.)
  • autodelete: whether the temporary HTML file should be autodeleted. (Default: True)
  • filename: filename of the temporary HTML file (default: 'temp.handsontable.html')
  • config: add additional config as defined in https://docs.handsontable.com/pro/5.0.0/tutorial-introduction.html
    • This will override the default config (per key basis) which are:
{
    data: data,
    rowHeaders: true,
    colHeaders: true,
    columns: columns,
    manualColumnResize: true,
    manualRowResize: true,
    renderAllRows: true,
    modifyColWidth: (width, col)=>{
        if(width > maxColWidth) return maxColWidth;
    },
    afterRenderer: (td, row, column, prop, value, cellProperties)=>{
        td.innerHTML = '<div class="wrapper"><div class="wrapped">' + td.innerHTML + '</div></div>';
    }
}

renderers example, if your data is a 2-D array:

{
    1: 'html',
    2: 'html'
}

or if your data is list of dict:

{
    "front": 'html',
    "back": 'html'
}

Enabling Image, HTML and Markdown renderer

This can be done in Python side, by converting everything to HTML. Just use any markdown for Python library.

from markdown import markdown
import base64
image_html = f'<img src="{image_url}" width=100 />'
image_html2 = f'<img src="data:image/png;base64,{base64.b64encode(image_bytes).decode()}" />'
markdown_html = markdown(markdown_raw)

Any then,

PagedViewer(data=data_matrix, renderers={
    "image_field": "html",
    "html_field": "html",
    "markdown_field": "html"
})

Screenshots

1.png 0.png

Related projects

  • htmlviewer - similar in concept to this project, but does not use HandsOnTable.js
  • TinyDB-viewer - uses HandsOnTable.js and also allow editing in Jupyter Notebook.

License

This software includes handsontable.js, which is MIT-licensed.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].