panel
panel copied to clipboard
Tabulator with frozen_rows scrolling/paging to top when updating content
ALL software version info
panel 1.4.2
Description of expected behavior and the observed behavior
With Tabulator using pagination and frozen_rows. When updating the data, the page snaps back to page 1 regardless of where the paging was whenever the update comes. Removing the frozen row, it behaves as expected.
Same behavior without paging using a scrollbar in Tabulator instead.
Also same behavior when using patch instead of writing the complete dataframe.
Complete, minimal, self-contained example code that reproduces the issue
import panel as pn
import numpy as np
import pandas as pd
pn.extension('tabulator')
def create_random_dataframe(n_rows):
"""Create a DataFrame with n_rows and 5 columns, where the first column is a constant 1 to n_rows and the rest are filled with random numbers."""
# Define the column names
columns = ['A', 'B', 'C', 'D', 'E']
# Generate a DataFrame with the first column being 1 to n_rows and the rest random
df = pd.DataFrame(np.random.rand(n_rows, 4), columns=columns[1:])
df.insert(0, 'A', range(1, n_rows + 1)) # Insert the constant column at position 0 with values 1 to n_rows
return df
df_data = create_random_dataframe(50)
# with frozen_rows 0, Tabulator will snap back to page 1 at every update
df_tab = pn.widgets.Tabulator(df_data,hidden_columns=['index'], layout='fit_data_fill', frozen_rows=[0], sortable=False, disabled=True, pagination='local', page_size=10)
# without frozen_rows set to 0 Tabulator will remain in whatever page it was after an update
# df_tab = pn.widgets.Tabulator(df_data,hidden_columns=['index'], layout='fit_data_fill', sortable=False, disabled=True, pagination='local', page_size=10)
def update_data():
df_data = create_random_dataframe(50)
df_tab.value = df_data
pn.state.add_periodic_callback(update_data, period=2000, start=True)
layout = pn.template.FastListTemplate(
site="my site",
title="Tabulator",
accent_base_color='#d78929',
header_background='#d78929',
main=[pn.Column(df_tab)],
)
layout.servable()
Screenshots or screencasts of the bug in action
https://github.com/holoviz/panel/assets/5510517/f5997620-e3be-4a59-8077-4fb0bb6583be
https://github.com/holoviz/panel/assets/5510517/4a1318d1-b357-4c36-ac5e-b7fd6aa84a02