能否将本地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
相关产品推荐
相关产品推荐

