因此,我制作了一个应用程序,它在pyqt5中显示虚线图,该程序从表格小部件获取数据。应用程序在第一个数据时运行良好,但是如果我更改了表中的数据,我也看不到图形中的更改,那么问题发生在哪里
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
import dash
import dash_core_components as dcc
import dash_html_components as html
import threading
import plotly.figure_factory as ff
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(956, 701)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.webEngineView = QtWebEngineWidgets.QWebEngineView(self.centralwidget)
self.webEngineView.setUrl(QtCore.QUrl("http://127.0.0.1:8050"))
self.webEngineView.setObjectName("webEngineView")
self.verticalLayout.addWidget(self.webEngineView)
self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
self.tableWidget.setObjectName("tableWidget")
self.tableWidget.setColumnCount(0)
self.tableWidget.setRowCount(0)
self.verticalLayout.addWidget(self.tableWidget)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.pushButton)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 956, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.tableWidget.setColumnCount(3)
self.tableWidget.setRowCount(3)
self.tableWidget.setHorizontalHeaderLabels(('X', 'Y1','Y2'))
header = self.tableWidget.horizontalHeader()
header.setSectionResizeMode(0, QtWidgets.QHeaderView.Stretch)
header.setSectionResizeMode(1, QtWidgets.QHeaderView.Stretch)
header.setSectionResizeMode(2, QtWidgets.QHeaderView.Stretch)
self.pushButton.clicked.connect(self.Clicked)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def Clicked(self):
df=[]
data = []
for c in range(self.tableWidget.columnCount()):
data.append([])
for r in range(self.tableWidget.rowCount()):
data[c].append(self.tableWidget.item(r,c).text())
for r in range(self.tableWidget.rowCount()):
df.append(dict(Task=data[0][r], Start=data[1][r], Finish=data[2][r]))
print(df)
threading.Thread(target=self.run_dash, args=([df]), daemon=True).start()
def run_dash(self,df):
fig = ff.create_gantt(df)
app = dash.Dash()
app.layout = html.Div([
dcc.Graph(figure=fig)
])
app.run_server(debug=True, use_reloader=False)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "PushButton"))
from PyQt5 import QtWebEngineWidgets
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
app.setStyle(QtWidgets.QStyleFactory.create('Fusion'))
Optimizer = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(Optimizer)
Optimizer.show()
sys.exit(app.exec_())
注意:第二列和第三列是日期列,用于显示甘特图。所以这两列中的数据输入应该是:2020-07-27 | 2020-07-30
Dash启动一个更新信息的服务器,但这是由浏览器呈现的,这意味着尽管服务器在客户端更新了信息,但它必须请求更新的信息并重新绘制。这可以通过重新加载页面来完成:
相关问题 更多 >
编程相关推荐