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

能否将本地Plotly Dash网页嵌入Pyforms Web构建的Python应用浏览器GUI?

可以实现,这里提供两种可行方案

Pyforms Web底层基于Flask,所以可以借助Flask的生态整合能力嵌入Plotly Dash应用,下面是两种实操方案:

方案1:iframe直接嵌入(快速上手)

这是最简便的方式,无需修改Pyforms或Dash的核心逻辑,直接通过iframe将本地Dash应用页面嵌入到Pyforms界面中。

代码示例:

from pyforms import BaseWidget
from pyforms.Controls import ControlHtml
import dash
from dash import html, dcc
import threading

# 启动Dash应用的函数
def run_dash_app():
    app_dash = dash.Dash(__name__)
    app_dash.layout = html.Div([
        html.H1("嵌入的Dash应用"),
        dcc.Graph(
            figure={
                'data': [{'x': [1,2,3], 'y': [4,1,2], 'type': 'bar'}]
            }
        )
    ])
    app_dash.run_server(port=8050, debug=False)

# 定义Pyforms窗口类
class MyPyformsApp(BaseWidget):
    def __init__(self):
        super().__init__("Pyforms嵌入Dash示例")
        # 添加iframe组件,指向Dash的本地服务地址
        self._dash_iframe = ControlHtml('')
        self._dash_iframe.value = '<iframe src="http://127.0.0.1:8050" width="100%" height="600px" frameborder="0"></iframe>'

# 在子线程启动Dash,避免阻塞Pyforms
threading.Thread(target=run_dash_app, daemon=True).start()

# 启动Pyforms应用
if __name__ == "__main__":
    from pyforms import start_app
    start_app(MyPyformsApp)

方案2:整合Flask路由(单端口服务,更优雅)

将Dash应用直接挂载到Pyforms的Flask实例上,两者共用一个Web服务端口,无需单独启动Dash的独立服务。

代码示例:

from pyforms import BaseWidget, start_app
from pyforms.Controls import ControlHtml
import dash
from dash import html, dcc

# 初始化Pyforms并获取其Flask应用实例
app_pyforms = start_app(BaseWidget, admin=False, return_app=True)

# 将Dash应用挂载到Pyforms的Flask实例上
app_dash = dash.Dash(__name__, server=app_pyforms, url_base_pathname='/dash-app/')
app_dash.layout = html.Div([
    html.H1("与Pyforms共用端口的Dash应用"),
    dcc.Graph(
        figure={
            'data': [{'x': [1,2,3], 'y': [4,1,2], 'type': 'line'}]
        }
    )
])

# 定义Pyforms窗口类
class MyPyformsApp(BaseWidget):
    def __init__(self):
        super().__init__("Pyforms整合Dash示例")
        self._dash_iframe = ControlHtml('')
        # 指向挂载后的Dash路径
        self._dash_iframe.value = '<iframe src="/dash-app/" width="100%" height="600px" frameborder="0"></iframe>'

# 启动Pyforms应用
if __name__ == "__main__":
    start_app(MyPyformsApp)

注意事项:

  • 方案1需确保Dash服务与Pyforms同时启动,子线程启动可避免阻塞
  • 方案2中return_app=True用于获取Pyforms的Flask实例,url_base_pathname需与iframe的src路径对应
  • 需提前安装依赖:pip install pyforms-web plotly dash

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:52:47