如何将布局更新到 Python Dash 应用程序中
Posted
技术标签:
【中文标题】如何将布局更新到 Python Dash 应用程序中【英文标题】:How to update a layout into a Python Dash application 【发布时间】: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 []
但是在这种情况下,当我选择页面时应用程序没有响应,可能是因为回调无效。
【问题讨论】:
【参考方案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 秒刷新一次页面。
【讨论】:
您好,谢谢。我见过这种解决方案,但我不想定期刷新页面;仅当用户执行某些操作时才必须进行此更新。 如果您需要参考用户的操作,您可能需要回调...... 是的,我编辑了问题来解释我的回调问题以上是关于如何将布局更新到 Python Dash 应用程序中的主要内容,如果未能解决你的问题,请参考以下文章