In [ ]:
from progressivis.nbwidgets import *
dt = DataTable()

In [ ]:
import numpy as np
import pandas as pd
import json
sz = 100
def df_to_dict(df):
    return [list(d.values()) for d in df.to_dict(orient='records')]

ivalues = np.random.randint(100,size=sz)
fvalues = np.random.rand(sz)
df = pd.DataFrame({'ix': range(sz), 'a':ivalues, 'b':fvalues})

In [ ]:
dt.columns = json.dumps(df.columns.tolist())
data = df_to_dict(df.iloc[0:10])
df_len = len(df)
js_data = {'data': data, 'recordsTotal': df_len, 
           'recordsFiltered': df_len, 'length': len(data)}
dt.data = json.dumps(js_data)
dt

In [ ]:
output2 = widgets.Output()
display(dt, output2)

def on_value_change(change):
    info = change['new']
    df_len = len(df)
    data = df_to_dict(df.iloc[info['start']:info['end']])
    js_data = {'data': data, 'recordsTotal': df_len, 'recordsFiltered': df_len, 
               'length': len(data), 'draw':info['draw'], 'page':info['page']}
    dt.data = json.dumps(js_data)
    with output2:
        print(change['new'])
dt.observe(on_value_change, "page")