You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dash-Cytoscape回调函数无法触发问题求助

问题原因及解决方法

你的回调无法触发的核心原因是回调函数定义在了app.run()之后。Dash要求所有回调必须在启动应用服务器(app.run())之前完成注册,否则框架无法识别到回调的关联关系。另外你的代码还缺失了Dash应用实例的初始化语句,这也是潜在问题。

修正后的代码

import json
from dash import Dash, html, Input, Output, callback
import dash_cytoscape as cyto

# 初始化Dash应用实例(原代码缺失此关键语句)
app = Dash(__name__)

# 假设你已提前定义get_elems、G、default_stylesheet、styles这些变量
def begin_render():
    app.layout = html.Div([
        cyto.Cytoscape(
            id="cytoscape",
            layout={"name": "preset"},  # "preset" 模式使用自定义坐标
            elements=get_elems(G),
            stylesheet=default_stylesheet,
            style={"width": "100%", "height": "800px"},
        ),
        html.Pre(id='cytoscape-tapNodeData-json', style=styles['pre'])
    ])

# 回调定义必须放在app.run()之前
@callback(
    Output('cytoscape-tapNodeData-json', 'children'),
    Input('cytoscape', 'tapNodeData')
)
def displayTapNodeData(data):
    return json.dumps(data, indent=2) if data else "点击节点查看数据"

if __name__ == "__main__":
    begin_render()
    app.run(debug=True)

额外验证点

  • 确认get_elems(G)返回的节点格式合规,每个节点必须包含data.id字段,示例格式如下:
    {"data": {"id": "node_1", "label": "示例节点1"}}
    
  • 确保styles['pre']已正确定义,比如:
    styles = {'pre': {'border': '1px solid #ddd', 'padding': '12px', 'border-radius': '4px'}}
    

内容的提问来源于stack exchange,提问作者jackhart591

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 02:17:14