我下面有一个表格和一个绘图,我需要在单击表格单元格时更新绘图。
ipywidgets
库没有专用的表格小部件。
qgrid
没有针对单元格选择的回调,仅针对行选择(我怀疑我可以破解它以对单元格点击做出反应,但我想所需的工作相当于使原始 html 表格可点击)。
pivottablejs
很酷,但这对我的任务来说有点过分了。
bokeh
DataTable 似乎根本没有回调。
您通常可以使用 jp_proxy_widgets 将 Python 回调附加到 Javascript 对象,这几乎与仅使用 Javascript 的正常方式相同。
例如,我在这里创建一个“vanilla”表并将点击回调附加到 表格元素:
您还可以使用您最喜欢的 Javascript 库执行类似的操作(有一些注意事项 - 请参阅文档)。请在这里查看 jp_proxy_widgets:
您现在可以使用面板的新制表器
轻松完成此操作示例:
import pandas as pd
import panel as pn
import numpy as np
pn.extension('tabulator')
sel_df = pd.DataFrame(np.random.randn(3, 5), columns=list('ABCDE'))
select_table = pn.widgets.Tabulator(sel_df, selection=[0, 2])
def click(event):
print(f'Clicked cell in {event.column!r} column, row {event.row!r} with value {event.value!r}')
select_table.on_click(click)
select_table
df = pd.DataFrame(
[
{"command": "st.selectbox", "rating": 4, "is_widget": True},
{"command": "st.balloons", "rating": 5, "is_widget": False},
{"command": "st.time_input", "rating": 3, "is_widget": True},
]
)
df = load_data()
edited_df = st.data_editor(df) # 👈 An editable dataframe
favorite_command = edited_df.loc[edited_df["rating"].idxmax()]["command"]
st.markdown(f"Your favorite command is **{favorite_command}** 🎈")
(示例取自他们的网站)