在 PyQt5 GUI 中使用 Dash (plot.ly)

Sd *_*unk 4 python pyqt5 plotly

我在尝试使用 Dash (绘图)创建仪表板并使用 PyQt5 创建的 GUI 时遇到问题。

我尝试将以下示例代码作为模块并放在代码末尾:

import dash
import dash_core_components as dcc
import dash_html_components as html


def run_dash(data, layout):


   app = dash.Dash()

   app.layout = html.Div(children=[
   html.H1(children='Hello Dash'),

   html.Div(children='''
    Dash: A web application framework for Python.
   '''),

   dcc.Graph(
    id='example-graph',
    figure={
        'data': data,
        'layout': layout
    }
)
])
   app.run_server(debug=True)
Run Code Online (Sandbox Code Playgroud)

但每次我收到错误can't find '__main__' module in ''

我知道最初,要创建 Dash,需要使用如下所示的主防护:

if __name__ == '__main__':
app.run_server(debug=True)
Run Code Online (Sandbox Code Playgroud)

但我的主窗口已经有了一个主防护,所以我不知道如何使两者一起工作。作为参考,这是我的 MainWindow 主防护:

if __name__ == '__main__':

app = QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())
Run Code Online (Sandbox Code Playgroud)

eyl*_*esc 5

解决方案是在另一个线程中执行 Dash,在另一个线程中执行它时可能会遇到问题,但使用这个答案你会得到以下结果:

\n\n
import sys\n\nimport threading\n\nfrom PyQt5 import QtWidgets\n\nimport dash\nimport dash_core_components as dcc\nimport dash_html_components as html\n\n\ndef run_dash(data, layout):\n    app = dash.Dash()\n\n    app.layout = html.Div(children=[\n        html.H1(children=\'Hello Dash\'),\n\n        html.Div(children=\'\'\'\n            Dash: A web application framework for Python.\n        \'\'\'),\n\n        dcc.Graph(\n            id=\'example-graph\',\n            figure={\n                \'data\': data,\n                \'layout\': layout\n            })\n        ])\n    app.run_server(debug=False)\n\n\nclass MainWindow(QtWidgets.QMainWindow):\n    pass\n\n\nif __name__ == \'__main__\':\n    data = [\n        {\'x\': [1, 2, 3], \'y\': [4, 1, 2], \'type\': \'bar\', \'name\': \'SF\'},\n        {\'x\': [1, 2, 3], \'y\': [2, 4, 5], \'type\': \'bar\', \'name\': u\'Montr\xc3\xa9al\'},\n    ]\n\n    layout = {\n        \'title\': \'Dash Data Visualization\'\n    }\n\n    threading.Thread(target=run_dash, args=(data, layout), daemon=True).start()\n    app = QtWidgets.QApplication(sys.argv)\n    mainWin = MainWindow()\n    mainWin.show()\n    sys.exit(app.exec_())\n
Run Code Online (Sandbox Code Playgroud)\n