【问题标题】:How to update a layout into a Python Dash application如何将布局更新到 Python Dash 应用程序中
【发布时间】:2021-10-08 18:39:36
【问题描述】:

我是 Python 和 Dash 的新手,我不知道如何强制我的应用程序在不使用回调的情况下刷新显示的布局;这是我的代码:

AppMain.py

app.layout = html.Div(
children=[
    dcc.Location(
        id=ID_URL,
        refresh=False
    ),
    html.Div(
        [
            dcc.Link(
                'Test',
                href=HREF_PAGE_TEST,
            ),
            dcc.Link(
                'Single',
                href=HREF_PAGE_SINGLE,
            ),
            dcc.Link(
                'Common',
                href=HREF_PAGE_COMMON,
            ),
        ]
    ),
    html.Div(
        id=ID_PAGE_CONTAINER,
    ),
),


@app.callback(
     Output(ID_PAGE_CONTAINER, 'children'),
     [Input(ID_URL, 'pathname')],
)
def clickOnPageToShow(pathname):
     return findPageToShow(pathname)

def findPageToShow(pathname):
    if pathname == HREF_PAGE_TEST:
        PageTest.data_frame = shared_data_frame
        return PageTest.layout

    elif pathname == HREF_PAGE_SINGLE:
        PageSingle.data_frame = shared_data_frame
        return PageSingle.layout

    elif pathname == HREF_PAGE_COMMON:
        PageCommon.data_frame = shared_data_frame
        return PageCommon.layout

    return ""

每个页面都建立自己的布局,用户点击相关的 dcc.Link 选择显示哪一个;此过程运行良好,用户可以随时更改页面。

我现在想要以编程方式构建和显示 PageSingle,所以我尝试添加:

AppMain.showPageSingle()

def showPageSingle():
    page = findPageToShow(HREF_PAGE_SINGLE)
    app.layout[ID_PAGE_CONTAINER].children = [page]
    #app.layout[ID_PAGE_CONTAINER].children = page

但是什么也没发生。

我做错了什么? 谢谢

编辑

如何建议我使用单击创建到页面中的表格单元格时引发的回调Common

PageCommon.py

@app.callback(
    Output(ID_PAGE_CONTAINER, 'children'),
    [
        Input(ID_TABLE_COMMON, 'active_cell'),
        Input(ID_TABLE_COMMON, 'data')
    ]
)
def clickOnCell(active_cell, data_table):

    if active_cell is not None:
        row_index = active_cell['row']
        col_index = active_cell['column']

        import AppMain
        return AppMain.buildPageSingle()

    return []

但是在这种情况下,当我选择页面时应用程序没有响应,可能是因为回调无效。

【问题讨论】:

    标签: python layout callback plotly-dash


    【解决方案1】:

    您可以通过这种方式(在您的布局中)添加“间隔”组件:

       dcc.Interval(
                id='interval-component',
                interval=60 * 1000,  # in milliseconds , 20 seconds every refresh
                n_intervals=0
    

    然后,您可以引用该组件。

    @app.callback(Output('live-update-time', 'children'),
                 [Input('interval-component', 'n_intervals')])
    
    def update_time(n):
        current_time = datetime.datetime.now()
        return html.P(f"Last Update at {current_time} ")
               
    

    在上面的示例中,我每 20 秒刷新一次页面。

    【讨论】:

    • 您好,谢谢。我见过这种解决方案,但我不想定期刷新页面;仅当用户执行某些操作时才必须进行此更新。
    • 如果您需要参考用户的操作,您可能需要回调......
    • 是的,我编辑了问题来解释我的回调问题
    猜你喜欢
    • 2019-04-29
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多