我正在用 python 为我的模拟模块创建一个接口。我正在使用 pyqt5 作为界面。在模拟中,我用 plotly 制作了一个 3D 交互式绘图,然后我使用 QWebEngineView 将其显示在我的界面上。在逻辑文件中我的方法代码下方显示情节:
#Method to display the 3D plot in the openGLWidget_3Dplot widget
def display_3D_plot(self, fig):
#Create a temporary HTML file to save the plotly figure
html = fig.to_html(full_html=False, include_plotlyjs='cdn')
with open('temp.html', 'w') as f:
f.truncate(0) # clear the file before writing to it
f.write(html)
#Remove any existing QWebEngineView from the layout
# create a QWebEngineView and set its size to match the openGLWidget_3Dplot
view = QWebEngineView()
view.setFixedSize(self.openGLWidget_3Dplot.size())
#Load the HTML file into the QWebEngineView
#NOTE: since QUrl.fromLocalFile() returns a path using the wrong separator "\",
#so we must replace the wrong separators with the correct ones, i.e. "/".
view.setUrl(QUrl.fromLocalFile(os.path.abspath('temp.html').replace('\\', '/')))
layout = QtWidgets.QVBoxLayout(self.openGLWidget_3Dplot)
self.openGLWidget_3Dplot.setLayout(layout)
layout.addWidget(view)
#Add QWebEngineView to the layout of the openGLWidget_3Dplot
self.openGLWidget_3Dplot.layout().addWidget(view)
** 在这种情况下,“无花果”是用 plotly 创建的 3D 图。
这里的问题是,每次我运行模拟时,都会在同一个小部件中显示一个新图,而之前的图也存在。它们垂直堆叠在一起。一旦我再次运行模拟,我希望旧图消失,以便新图可以正确显示。那么我怎样才能确定在添加新图之前旧图被删除了呢?
我尝试了很多不同的东西,但都没有用,向 chatGPT 寻求帮助,但也无济于事。
我尝试清除 HTML 文件(如代码中所示),为小部件创建容器并将其删除,使用 setHTML(""),从布局中删除 QWebEngineView,以及来自 chatGPT 的以下代码行:
# clear the contents of the openGLWidget_3Dplot
self.openGLWidget_3Dplot.makeCurrent()
gl.glClear(gl.GL_COLOR_BUFFER_BIT | gl.GL_DEPTH_BUFFER_BIT)
self.openGLWidget_3Dplot.doneCurrent()
我还尝试了其他较小的更改,但目前都没有用。
有什么建议或意见吗?