在 PyQt5 GUI 中使用 Dash (plot.ly)
Posted
技术标签:
【中文标题】在 PyQt5 GUI 中使用 Dash (plot.ly)【英文标题】:Use Dash (plot.ly) in PyQt5 GUI 【发布时间】:2018-07-25 15:17:55 【问题描述】:我在尝试使用 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)
但每次我收到错误can't find '__main__' module in ''
我知道一开始,要创建一个 Dash,使用如下的主守卫:
if __name__ == '__main__':
app.run_server(debug=True)
但是我的 MainWindow 已经有了一个主要的守卫,所以我不知道如何让两者一起工作。作为参考,这是我的 MainWindow 主守卫:
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())
【问题讨论】:
我已经更新了我的问题,并提供了可能更有帮助的代码。如果仍然不正确,请随时通知我。 【参考方案1】:解决方案是在另一个线程中执行 Dash,在另一个线程中执行时可能会遇到问题,但使用 this answer 会得到以下结果:
import sys
import threading
from PyQt5 import QtWidgets
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=False)
class MainWindow(QtWidgets.QMainWindow):
pass
if __name__ == '__main__':
data = [
'x': [1, 2, 3], 'y': [4, 1, 2], 'type': 'bar', 'name': 'SF',
'x': [1, 2, 3], 'y': [2, 4, 5], 'type': 'bar', 'name': u'Montréal',
]
layout =
'title': 'Dash Data Visualization'
threading.Thread(target=run_dash, args=(data, layout), daemon=True).start()
app = QtWidgets.QApplication(sys.argv)
mainWin = MainWindow()
mainWin.show()
sys.exit(app.exec_())
【讨论】:
以上是关于在 PyQt5 GUI 中使用 Dash (plot.ly)的主要内容,如果未能解决你的问题,请参考以下文章
Python 3.5,单独窗口中的 pyqt5 进度条 gui
在pyqt5中退出GUI时终止正在运行的进程的正确方法是什么?