将图片嵌入到dash制作的app中,根据click选中多个货位,显示更改颜色,然后在用折线将储位连接形成最短路径
时间: 2024-02-18 10:05:35 浏览: 67
以下是一个Python代码示例,使用Plotly Dash将仓储布局图嵌入到Web应用程序中,并实现上述功能:
```python
import dash
import dash_core_components as dcc
import dash_html_components as html
import plotly.graph_objects as go
from dash.dependencies import Input, Output, State
# 设置仓库大小和货架数量
n_rows = 5
n_cols = 4
# 创建仓库布局图
fig = go.Figure()
# 添加仓库平面布局
fig.add_shape(type="rect",
x0=0, y0=0,
x1=n_cols, y1=n_rows,
line=dict(color='black', width=2),
fillcolor='white')
# 添加货架
for i in range(1, n_rows + 1):
for j in range(1, n_cols + 1):
fig.add_shape(type="rect",
x0=j - 0.5, y0=i - 0.5,
x1=j + 0.5, y1=i + 0.5,
line=dict(color='black', width=2),
fillcolor='white')
# 初始化货位颜色
colors = [['white' for _ in range(n_cols)] for _ in range(n_rows)]
# 点击事件回调函数
def on_click(trace, points, state):
# 获取点击的坐标
i, j = int(points.xs[0]), int(points.ys[0])
# 将货位标红
colors[i-1][j-1] = 'red'
# 更新货位颜色
fig.data[0].update(dict(fillcolor=colors))
app = dash.Dash(__name__)
app.layout = html.Div([
dcc.Graph(
id='warehouse-layout',
figure=fig
),
html.Button('Reset', id='reset-button'),
html.Div(id='selected-coordinates')
])
@app.callback(
Output('warehouse-layout', 'figure'),
Input('warehouse-layout', 'clickData'),
State('warehouse-layout', 'figure')
)
def update_layout(clickData, figure):
if clickData:
# 获取点击的坐标
i, j = int(clickData['points'][0]['y']), int(clickData['points'][0]['x'])
# 将货位标红
colors[i-1][j-1] = 'red'
# 更新货位颜色
figure['data'][0].update(dict(fillcolor=colors))
return figure
@app.callback(
Output('selected-coordinates', 'children'),
Input('reset-button', 'n_clicks')
)
def reset_colors(n_clicks):
if n_clicks:
# 重置货位颜色
global colors
colors = [['white' for _ in range(n_cols)] for _ in range(n_rows)]
# 更新货位颜色
fig.data[0].update(dict(fillcolor=colors))
return ''
if __name__ == '__main__':
app.run_server(debug=True)
```
这段代码会创建一个Dash应用程序,其中包含一个嵌入的仓储布局图和一个重置按钮。当单击货位时,将该货位标记为红色,并在底部显示已选中的货位坐标。当单击重置按钮时,将重置所有货位的颜色。
要实现将储位连接形成最短路径,您可以使用有关路径规划的算法,并在Dash应用程序中实现该算法。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![.zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)