提问人:Prmake 提问时间:10/16/2023 更新时间:10/17/2023 访问量:31
破折号回调活动单元格仅在特定列上
Dash callback active cell only on specific column
问:
我正在使用下面的方法在单击我的 Dash DataTable 中的任何单元格时打开一个模式。但是,我只希望在单击第一列中的单元格时打开模态,而不是每个单元格都打开模态。关于如何仅将其应用于第一列中的活动单元格的任何提示?callback
callback
@app.callback(Output('modal', 'is_open'),
[Input('Data_Table', 'active_cell'),
Input('close', 'n_clicks')],
[State("modal", "is_open")])
def toggle_modal(n1, n2, is_open):
if n1 or n2:
return not is_open
return is_open
答:
0赞
Waleed Malik
10/17/2023
#1
您可以访问数据表中活动单元格的位置,如下所示:
active_cell['column'] # column number (int)
active_cell['row'] # row number (int)
active_cell['column_id'] # column name (str)
下面是一个完整的工作示例,其中单击该单元格时,仅第一列中的单元格的值将在模式中返回:
from dash import Dash, html, Input, Output, State, dash_table, no_update
import dash_bootstrap_components as dbc
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/solar.csv')
app = Dash(__name__,external_stylesheets=[dbc.themes.BOOTSTRAP])
modal = html.Div(
[
dbc.Modal(
[
dbc.ModalHeader(dbc.ModalTitle("Header")),
dbc.ModalBody(id='modal-body'),
dbc.ModalFooter(
dbc.Button(
"Close", id="close", className="ms-auto", n_clicks=0
)
),
],
id="modal",
is_open=False,
),
]
)
app.layout = html.Div(
[
modal,
dash_table.DataTable(id='datatable',data=df.to_dict('records'), columns=[{"name": i, "id": i} for i in df.columns])
]
)
@app.callback(
[Output('modal','is_open'),Output('modal-body','children')],
Input('datatable','active_cell'),
State("modal", "is_open")
)
def open_modal(active_cell,is_open):
if active_cell['column'] == 0:
return [not is_open, df[active_cell['column_id']][active_cell['row']]]
return [no_update,no_update]
if __name__ == '__main__':
app.run(debug=True)
评论