Python - Plotly 和 Dash - 以切换标签为目的的按钮点击
Python - Plotly and Dash - Button Click with Purpose of Switching Tabs
我正在使用 Python 启动一个 plotly 和 dash 应用程序。顶部是一个包含三个选项卡的菜单:Home、Create 和 Load。我们从主屏幕开始。
我的问题:通过单击 'Home' 选项卡中的按钮,我想重定向到 'Open' 选项卡。关于如何单击一个选项卡中的按钮以转到另一个选项卡的任何想法?
下面包含我试图解决此问题的文件:
import dash
import plotly.graph_objs as go
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
from panaviaFunctions.functionsGetJSON import getJSON
from panaviaFunctions.functionsSetJSON import setJSON
app = dash.Dash()
settings = getJSON('settingsStyle.json')
app.layout = html.Div([
html.Div([
html.H1('Panavia', style = settings['menuTab']),
dcc.Tabs(id = 'panaviaMenu',
value = 'panaviaHome',
children = [
dcc.Tab(label = 'Home',
value = 'panaviaHome',
style = settings['menuTabOff'],
selected_style = settings['menuTabOn']),
dcc.Tab(label = 'Create',
value = 'panaviaCreate',
style = settings['menuTabOff'],
selected_style = settings['menuTabOn']),
dcc.Tab(label = 'Open',
value = 'panaviaOpen',
style = settings['menuTabOff'],
selected_style = settings['menuTabOn'])
])
], style = settings['panaviaMenu']),
html.Div(id = 'panaviaTab')
])
@app.callback(Output('panaviaTab', 'children'), Input('panaviaMenu', 'value'))
def tabFunction(tab):
''' '''
return {'panaviaHome' : tabHome(tab), 'panaviaCreate' : tabCreate(tab), 'panaviaOpen' : tabOpen(tab)}[tab]
def tabHome(tab):
''' '''
if (tab == 'panaviaHome'):
return html.Div([
html.Button('Click', id = 'button')
], style = settings['panaviaTab'])
def tabCreate(tab):
''' '''
if (tab == 'panaviaCreate'):
return html.Div([
html.H1('create')
], style = settings['panaviaTab'])
def tabOpen(tab):
''' '''
if (tab == 'panaviaOpen'):
return html.Div([
html.H1('open')
], style = settings['panaviaTab'])
if (__name__ == '__main__'):
app.run_server()
此处包含上述代码运行时使用的独立文件:
from json import load
def getJSON(arg):
''' '''
with open('panaviaSettings/{}'.format(arg), 'r') as fileVariable:
return load(fileVariable)
from json import dump
def setJSON(arg):
''' '''
with open('panaviaSettings/{}'.format(arg), 'w') as fileVariable:
dump(fileVariable, arg, indent = 4)
{
"panaviaMenu" : {
"margin" : 10,
"padding" : 10,
"borderRadius" : 5,
"backgroundColor" : "#121212"
},
"menuTab" : {
"fontSize" : 39,
"color" : "#f5f5f5",
"fontWeight" : "bold",
"textAlign" : "center",
"fontFamily" : "sans serif"
},
"menuTabOn" : {
"padding" : 3,
"borderRadius" : 5,
"backgroundColor" : "#181818",
"border" : "2.5px solid #181818",
"color" : "#f5f5f5",
"fontWeight" : "bold",
"fontFamily" : "sans serif"
},
"menuTabOff" : {
"padding" : 3,
"borderRadius" : 5,
"backgroundColor" : "#282828",
"border" : "2.5px solid #282828",
"color" : "#f5f5f5",
"fontWeight" : "bold",
"fontFamily" : "sans serif"
},
"panaviaTab" : {
"backgroundColor" : "#121212",
"borderRadius" : 5,
"padding" : 5,
"margin" : 10
},
"homeMap" : {
"border" : "2.5px solid #282828",
"backgroundColor" : "#181818",
"borderRadius" : 5,
"margin" : 5
},
"mapToken" : "< token >"
}
dash==1.20.0
dash-core-components==1.16.0
dash-html-components==1.1.3
dash-renderer==1.9.1
dash-table==4.11.3
plotly==4.14.3
您可以添加回调来设置 dcc.Tabs()
对象的值。默认为主页,return 如果未触发回调,则为主页 ID,因此它将在页面首次加载时设置正确的 ID。
@app.callback(
Output('panaviaMenu', 'value'),
[Input('button', 'n_clicks')]
)
def open_home_tab(n_clicks):
ctx = dash.callback_context
if not ctx.triggered:
return 'panaviaHome'
return 'panaviaOpen'
我正在使用 Python 启动一个 plotly 和 dash 应用程序。顶部是一个包含三个选项卡的菜单:Home、Create 和 Load。我们从主屏幕开始。
我的问题:通过单击 'Home' 选项卡中的按钮,我想重定向到 'Open' 选项卡。关于如何单击一个选项卡中的按钮以转到另一个选项卡的任何想法?
下面包含我试图解决此问题的文件:
import dash
import plotly.graph_objs as go
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
from panaviaFunctions.functionsGetJSON import getJSON
from panaviaFunctions.functionsSetJSON import setJSON
app = dash.Dash()
settings = getJSON('settingsStyle.json')
app.layout = html.Div([
html.Div([
html.H1('Panavia', style = settings['menuTab']),
dcc.Tabs(id = 'panaviaMenu',
value = 'panaviaHome',
children = [
dcc.Tab(label = 'Home',
value = 'panaviaHome',
style = settings['menuTabOff'],
selected_style = settings['menuTabOn']),
dcc.Tab(label = 'Create',
value = 'panaviaCreate',
style = settings['menuTabOff'],
selected_style = settings['menuTabOn']),
dcc.Tab(label = 'Open',
value = 'panaviaOpen',
style = settings['menuTabOff'],
selected_style = settings['menuTabOn'])
])
], style = settings['panaviaMenu']),
html.Div(id = 'panaviaTab')
])
@app.callback(Output('panaviaTab', 'children'), Input('panaviaMenu', 'value'))
def tabFunction(tab):
''' '''
return {'panaviaHome' : tabHome(tab), 'panaviaCreate' : tabCreate(tab), 'panaviaOpen' : tabOpen(tab)}[tab]
def tabHome(tab):
''' '''
if (tab == 'panaviaHome'):
return html.Div([
html.Button('Click', id = 'button')
], style = settings['panaviaTab'])
def tabCreate(tab):
''' '''
if (tab == 'panaviaCreate'):
return html.Div([
html.H1('create')
], style = settings['panaviaTab'])
def tabOpen(tab):
''' '''
if (tab == 'panaviaOpen'):
return html.Div([
html.H1('open')
], style = settings['panaviaTab'])
if (__name__ == '__main__'):
app.run_server()
此处包含上述代码运行时使用的独立文件:
from json import load
def getJSON(arg):
''' '''
with open('panaviaSettings/{}'.format(arg), 'r') as fileVariable:
return load(fileVariable)
from json import dump
def setJSON(arg):
''' '''
with open('panaviaSettings/{}'.format(arg), 'w') as fileVariable:
dump(fileVariable, arg, indent = 4)
{
"panaviaMenu" : {
"margin" : 10,
"padding" : 10,
"borderRadius" : 5,
"backgroundColor" : "#121212"
},
"menuTab" : {
"fontSize" : 39,
"color" : "#f5f5f5",
"fontWeight" : "bold",
"textAlign" : "center",
"fontFamily" : "sans serif"
},
"menuTabOn" : {
"padding" : 3,
"borderRadius" : 5,
"backgroundColor" : "#181818",
"border" : "2.5px solid #181818",
"color" : "#f5f5f5",
"fontWeight" : "bold",
"fontFamily" : "sans serif"
},
"menuTabOff" : {
"padding" : 3,
"borderRadius" : 5,
"backgroundColor" : "#282828",
"border" : "2.5px solid #282828",
"color" : "#f5f5f5",
"fontWeight" : "bold",
"fontFamily" : "sans serif"
},
"panaviaTab" : {
"backgroundColor" : "#121212",
"borderRadius" : 5,
"padding" : 5,
"margin" : 10
},
"homeMap" : {
"border" : "2.5px solid #282828",
"backgroundColor" : "#181818",
"borderRadius" : 5,
"margin" : 5
},
"mapToken" : "< token >"
}
dash==1.20.0
dash-core-components==1.16.0
dash-html-components==1.1.3
dash-renderer==1.9.1
dash-table==4.11.3
plotly==4.14.3
您可以添加回调来设置 dcc.Tabs()
对象的值。默认为主页,return 如果未触发回调,则为主页 ID,因此它将在页面首次加载时设置正确的 ID。
@app.callback(
Output('panaviaMenu', 'value'),
[Input('button', 'n_clicks')]
)
def open_home_tab(n_clicks):
ctx = dash.callback_context
if not ctx.triggered:
return 'panaviaHome'
return 'panaviaOpen'